Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail 23.11.2011 | Категория: 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-запрос. Но знать это, мне кажется, будет полезно.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на Я.ру Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Поделиться ссылкой на Friendfeed Добавить в Яндекс.Закладки Добавить в закладки Memori Добавить в закладки Google
Просмотров: 2725 | Комментариев: 3

Комментарии

Отзывы посетителей сайта о статье
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-2012
При использовании материалов ссылка на сайт обязательна
Время генерации: 0,15 сек. / MySQL: 2 (0,0006 сек.) / Память: 3,5 Mb
Наверх