Blog. Just Blog

Какая может быть максимальная длина URL?

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Однажды, при разработке одного из проектов, я столкнулся с тем, что требовалась передача большого количества данных из формы методом GET, то есть через адресную строку. У меня под браузером Firefox все работало как надо, а вот у манагеров, сидящих на Internet Explorer, выдавалась ошибка, что запрошенная страница не может быть отображена. Как оказалось, проблема была в том, что получался слишком длинный адрес URL, и ограничения браузера не позволяют его открыть. Причем у Firefox по всей видимости, этот лимит выше, чем у Internet Explorer. Это натолкнуло меня на мысль протестировать различные браузеры на предмет максимально допустимой длины URL, и вот что у меня получилось. Для опытов был написан коротенький скрипт:
  1. if ($_GET['long']) {
  2.     echo '<script>document.write(document.location.href.length);</script>';
  3. }
  4. else {
  5.     $long=1;
  6.     for ($i=0$i<23$i++) {
  7.         $long=ceil(2*$long);
  8.         echo '<a href="test.php?long='.$long;
  9.         echo '#chk='.str_repeat('x',$long).'_end!">'.$long.'</a><br>';
  10.     }
  11. }    
Сразу могут возникнуть вопросы: почему в адресе используется именно анкор, а не обычный параметр, и почему для подсчета длины используется JavaScript, а не что-то типа str_len(getenv('REQUEST_URI'))? Да, первый вариант тестового скрипта был именно таким, но я сразу же столкнулся с ограничением сервера Apache на предельно допустимую длину GET-запроса. При обращении к странице сервер выдавал вместо нее ошибку 414 - Request-URI Too Large. Попытки изменить значения параметров LimitRequestLine в конфигурации Apache привели к другой ошибке:

LimitRequestLine "65535" must not exceed the precompiled maximum of 8190
То есть для изменения порогового значения надо перекомпилировать сервер с нужными значениями, а это я сделать не могу, тем более на хостинговом сервере. Пропатчить все проверки в локальной версии сервера тоже не удалось, ограничение все равно оставалось. Поэтому пришлось извернуться через анкор и JavaScript.

Теперь переходим к участникам соревнований. Это Firefox 3.6.24, Firefox 8.0.1, Internet Explorer 8.0, Opera 11.52, Safari 5.1, Chromium 15.0 и Google Chrome 15.0. Сам процесс заключался в том, что я просто открывал по очереди ссылки со страницы в разных браузерах. Под длиной URL подразумевается длина строки от "http://" и до окончания анкора. Результаты тестирования:
  • Firefox 3.6.24 и Firefox 8.0.1 открыли все ссылки, но после тестового значения 8388608 анкор в адресной строке браузера перестал отображаться.

  • Internet Explorer 8.0 повел себя совсем неадекватно. При открытии ссылок они принудительно усекались до длины 4121 символ и отображались в адресной строке браузера, соответственно, так же. Более короткие ссылки открылись без проблем.

  • Opera 11.52 открыла все ссылки без проблем, при отображении даже самых длинных анкоров также никаких замечаний нет.

  • Safari 5.1 открыл все ссылки до тестового значения 8388608, а на нем вылетел с фатальной ошибкой.

  • Chromium 15.0 и Google Chrome 15.0 с трудом отрисовали даже исходную страницу, периодически вываливая вместо нее свое "Опаньки...". Проблемы с отображением URL в адресной строке браузера начались с тестового значения 32768. Ссылки же удалось открыть лишь до 1048576, дальше появлялось неизменное "Опаньки...".
Как видите, поведение браузеров значительно отличается, а основное ограничение на размер GET-запроса накладывает сервер Apache. Конечно, вряд ли кто-то захочет передавать мегабайты информации через строку браузера, для этого придуман POST-запрос. Но знать это, мне кажется, будет полезно.

Поделиться ссылкой ВКонтакте
Просмотров: 29261 | Комментариев: 10

Метки: HTML, браузеры
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Андрей (12.03.2015 в 10:31):
Спасибо за информацию. Наткнулся на проблему с некоторыми сайтами по работе с онлайн-картами при построении маршрутов, где в адресную строку добавляются точки. А можно как-то актуализировать инормацию? А то уже и браузеры новые появились и версии новые и разделение на x32, x64 для IE.
Спамбот (10.02.2015 в 16:41):
Роман, ManHunter, хорошо пообщались)
Анатолий (24.01.2015 в 19:39):
Полезно, спасибо!
Денис (18.02.2014 в 00:50):
ManHunter, спасибо за ответ Роману. Повеселил. Поддерживаю. А Рома, видать, тексты не осиливает (врожденные ограничения на длину впитываемой строки)

Полезно знать. Спасибо.
myr4ik07 (03.02.2013 в 14:05):
Не хотите добавить кнопку "шаринга" в twitter?!
ManHunter (12.07.2012 в 08:07):
Словоблудие - это твой никчемный и нахуй никому не нужный каммент. А у меня исследовательская статья, на основании которой получен результат. Так что лучше молчи, если ничего умного сказать не можешь.
Роман (12.07.2012 в 07:26):
Почему просто цифру не написать? Развел словоблудие
ManHunter (26.11.2011 в 17:29):
Я встречал уже немало сайтов, которые передают данные через анкоры + ajax/post. Конечно, не в таких промышленных объемах, но способ вполне имеет место быть, и он позволяет легко обойти ограничения сервера.
user (26.11.2011 в 01:57):
Opera порадовала... Впрочем при ограничениях сервера фишка становится бесполезной ((
liz (24.11.2011 в 14:19):
Пасиб!

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.003 сек.) / Память: 4.5 Mb
Наверх