S3.Blog

22 Августа 2017
A A A   RSS-лента
"Я знаю, что ничего не знаю, но многие не знают и этого". Сократ [?].

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

Дата последнего изменения: 22 Октября 2010
Метки статьи: Документация
Все веб-разработчики рано или поздно останавливаются перед вопросом "А пройдут ли данные такой-то длины через GET-запрос"?
Автор статьи предоставляет развернутый ответ на этот вопрос с указанием базовых ограничений популярных браузеров и серверов.
 




Когда я читал документацию по Google Chart API, во время подготовки посвященного ему поста, меня удивил немалый объем данных, который разработчики предлагают передавать через GET запросы. Причиной тому было непонятно откуда взявшееся убеждение в том, что максимальная длина URL, регламентированная стандартом HTTP, составляет 256 символов. В действительности это далеко не так (ложное воспоминание о числе 256 скорее всего было порождено SQL-типом VARCHAR или чем-то подробным). HTTP формально не лимитирует длину URL, но ограничение на нее накладывают реализации этого протокола.

Я нашел значения величин этих ограничений для популярных браузеров и HTTP-серверов в списке часто-задаваемых вопросов на сайте boutell.com. Далее по тексту — переведенный вариант выжимки из этой статьи, который я немного дополнил от себя.

Браузеры


  • Microsoft Internet Explorer
    Начиная с четвертой версии браузера, максимальная длина воспринимаемого URL составляет 2,083 символов. При этом длина GET-запроса лимитирована 2,048 символа. На POST никаких ограничений, понятное дело, не накладывается.
     
  • Firefox
    В старых версиях (1.5.x) было ограничение на 64 килобайта, но, вполне возможно, это был баг, который позже исправили. Теперь, по всей видимости, ограничения на длину URL снято вообще, либо оно существенно превышает «пределы разумного» (проверено, что Firefox может «съесть» URL длиной в 100,000 символов).

  • Safari
    Лимита на длину URL нет так же, как и в Firefox. Автор FAQ успешно протестировал адрес длиной 80,000 символов.
     
  • Opera
    По заявлению разработчиков, лимита нет. Успешно прошли тесты с 190,000 символами.


Серверы


  • Apache
    Строго говоря, ограничение длины URL можно менять в конфигурации сервера параметрами LimitRequest*, поэтому все зависит от конкретного случая. Но существуют значения по-умолчанию, которые часто оставляют неизменными. Они лимитируют длину URL (точнее, любой строки HTTP-запроса) значением в 8 килобайт. В более ранних версиях Apache было 4 килобайта.
     
  • Microsoft Internet Information Server
    По-умолчанию, длина URL ограничена пределом в 16 килобайт. При необходимости, значение можно увеличить. Немного странно, что сервер Microsoft не накладывает столь же жестких ограничений на этот параметр, как и браузер.
     
  • Perl HTTP::Daemon
    8,000 символов на длину URL и 16 килобайт для суммарного объема HTTP-заголовка. Лимит несложно снять, для чего потребуется откорректировать значения 16×1024 в файле Daemon.pm.


Общие рекомендации


Принимая во внимание приведенные сведения, конечно же не стоит использовать URL длиной более 2,000 символов. В противном случае такие ссылки не будут работать примерно у 60% пользователей интернет.

Чаще всего, этой величины будет вполне хватать, т.к. если речь идет о передаче большого объема информации с клиента на сервер, по многим причинам (для безопасности, например) рекомендуется отдавать предпочтение методу POST. То-есть делать так:
<form action="myscript.php" method="POST">
...
</form>

GET же предназначен для адресации страниц с динамическим контентом, чье содержимое не меняется при каждом повторном обращении. Самый распространенный тому пример — отчеты поисковых систем.

В общем случае, если данные не требуются для повторной генерации идентичной веб-страницы, такие данные не должны быть частью URL.

Когда необходимость в объемных URL все-таки присутствует, можно использовать разные алгоритмы кодирования для сокращения их длины. Один из примеров был приведен в уже упоминавшемся посте о Google Chart, на примере специального формата записи данных для построения диаграмм. В особо-тяжелых случаях можно сжимать данные gzip-ом с последующим кодированием в BASE64, но лучше, конечно, по возможности избегать таких вещей. Более красивым решением может быть использование базы данных для хранения на сервере параметров каждого запроса. В таком случае URL сможет содержать только короткий идентификатор необходимой записи.


Что произойдет на сервере при выходе длины запроса за дозволенный предел?


Будет выдано сообщение об ошибке с кодом 413 (Entity Too Large). Обрезания URL не произойдет по той причине, что результат изменения адреса может быть непредсказуем.

О том, как именно отреагирует в таком случае веб-приложение, однозначно ответить нельзя. В любом случае, всегда следует контролировать подобные ситуации.


---
Взято отсюда: Какой максимальной длины может быть URL?


Похожие материалы:




 
  Имя *:   Решите пример *: =
 
Полужирный Курсив Подчеркнутый Перечеркнутый
 
Вставить изображение Сделать цитатой Вставить ссылку Вставить код

Вставить смайл
 
 

 



© S3.Blog: Если критикуешь, не предлагая решения проблемы, то ты становишься частью этой проблемы.