Существует ли ограничение на длину запроса GET?

Существует ли ограничение на длину запроса GET?

Ответ 1

Не в RFC, нет, но существуют практические ограничения.

Протокол HTTP не устанавливает априорного ограничения на длину URI. Серверы ДОЛЖНЫ иметь возможность обрабатывать URI любого ресурса, который они служить, и СЛЕДУЕТ иметь возможность обрабатывать URI неограниченной длины, если они предоставлять формы на основе GET, которые могут генерировать такие URI. Сервер СЛЕДУЕТ возвращать 414 (Request-URI Too Long) статус, если URI длиннее чем сервер может обрабатывать (см. раздел 10.4.15).

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

Ответ 2

Эта статья довольно хорошо подводит итоги

Сводка: это зависит от реализации, поскольку в RFC не указано ограничение. Было бы безопасно использовать до 2000 символов (предел IE). Если вы находитесь где-то рядом с этой длиной, вы должны убедиться, что вам действительно нужны URI, что долго, возможно, альтернативный дизайн может обойти это.

URI должны читаться, даже если они используются для отправки данных.

Ответ 3

Спецификация не ограничивает длину запроса HTTP Get, но разные браузеры реализуют свои собственные ограничения. Например, Internet Explorer имеет ограничение, реализованное с 2083 символами.

Ответ 4

Как запрошено пользователем Erickson, я публикую свой комментарий в качестве ответа:

Я провел еще несколько тестов с IE8, IE9, FF14, Opera11, Chrome20 и Tomcat 6.0.32 (новая установка), Джерси 1.13 на стороне сервера. Я использовал функцию jQuery $.getJson и JSONP. Результаты: все браузеры допускают около 5400 символов. FF и IE9 сделали примерно до 6200 символов. Все выше возвращено "400 Bad request". Я больше не исследовал, что было ответственным за 400. Я был в порядке с максимумом, который я нашел, потому что мне понадобилось около 2000 символов в моем случае.

Ответ 6

setFixedLengthStreamingMode (int) с параметрами contentLength может установить фиксированную длину тела запроса HTTP.