У меня есть виджет JavaScript, который общается с моим приложением для направляющих путем создания тегов в DOM. Время от времени я вижу уродливый запрос в своих журналах сервера, где URL является усеченным в 255 символах:
http://myapplication.example/mycontroller/1/myaction?hostname=www.mycustomer.example&request[param_a]=3&request[param_b]=1&request[param_c]=0&request[param_d]=0&request[param_e]=3&request[param_f]=1&request[param_g]=4&request[param_h]=0&request[param_i]=5&request
От Google и Stackoverflow (Какова максимальная длина URL в различных браузерах?), похоже, что 255 символов не являются допустимым пределом на URL.
Вот то, что я знаю:
Вот то, что я НЕ знаю:
Что лучшим способом является к первопричине эта проблема?
Лучший способ решить корневую причину - сделать запрос не GET, а POST.
AFAIK не существует установленных ограничений на длину QueryString, поэтому реальный предел может быть разным. Я знаю, что 4000 - это ограничение на некоторых веб-серверах (не помню, IIS или Apache, и можно ли его изменить), но вполне возможно, что некоторые браузеры имеют гораздо меньшие ограничения. Тот факт, что вы не получаете user-agent, может подчеркнуть, что это мобильный браузер, краулер или другое приложение, а не настоящий браузер.
POST-запросы немного сложнее в исполнении, но они могут нести гораздо большую "полезную нагрузку" и могут быть настроены на стороне сервера.
Я не уверен, почему это может происходить, RFC 2068 гласит:
Серверы должны быть осторожны в зависимости от длины URI более 255 байт, потому что некоторые старые реализации клиентов или прокси могут не поддерживать должным образом эти длины.
Возможно, сервер неправильно обрабатывает длинные GET-параметры, а может быть, старые браузеры (возможно, IE6) усекают параметры перед отправкой в надежде избежать неудачных запросов сервера.
Однако, ни в одном браузере или сервере (о которых я знаю) нет ограничений на длину POST-запросов, так что это, скорее всего, гарантированно работающее решение.
Edit: По этой ссылке говорится, что некоторые браузеры накладывают ограничения на длину строки запроса, однако все они кажутся довольно длинными. Возможно, мобильные браузеры ограничивают длину до ~255 для экономии памяти, поскольку она находится в более ограниченном количестве.