URL, становящийся усеченным в 255 символах

У меня есть виджет 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.

Вот то, что я знаю:

  • Это - спорадическая проблема, этого не происходит по ВСЕМ запросам
  • URL является усеченным в 255 символах, когда это происходит
  • Когда эта ошибка происходит, агент пользователя не зарегистрирован в следе

Вот то, что я НЕ знаю:

  • На каких типах браузеров эта ошибка происходит? Возможно, некоторый мобильный браузер...

Что лучшим способом является к первопричине эта проблема?

5
задан Community 23 May 2017 в 12:01
поделиться

2 ответа

Лучший способ решить корневую причину - сделать запрос не GET, а POST.

AFAIK не существует установленных ограничений на длину QueryString, поэтому реальный предел может быть разным. Я знаю, что 4000 - это ограничение на некоторых веб-серверах (не помню, IIS или Apache, и можно ли его изменить), но вполне возможно, что некоторые браузеры имеют гораздо меньшие ограничения. Тот факт, что вы не получаете user-agent, может подчеркнуть, что это мобильный браузер, краулер или другое приложение, а не настоящий браузер.

POST-запросы немного сложнее в исполнении, но они могут нести гораздо большую "полезную нагрузку" и могут быть настроены на стороне сервера.

3
ответ дан 14 December 2019 в 19:10
поделиться

Я не уверен, почему это может происходить, RFC 2068 гласит:

Серверы должны быть осторожны в зависимости от длины URI более 255 байт, потому что некоторые старые реализации клиентов или прокси могут не поддерживать должным образом эти длины.

Возможно, сервер неправильно обрабатывает длинные GET-параметры, а может быть, старые браузеры (возможно, IE6) усекают параметры перед отправкой в надежде избежать неудачных запросов сервера.

Однако, ни в одном браузере или сервере (о которых я знаю) нет ограничений на длину POST-запросов, так что это, скорее всего, гарантированно работающее решение.

Edit: По этой ссылке говорится, что некоторые браузеры накладывают ограничения на длину строки запроса, однако все они кажутся довольно длинными. Возможно, мобильные браузеры ограничивают длину до ~255 для экономии памяти, поскольку она находится в более ограниченном количестве.

2
ответ дан 14 December 2019 в 19:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: