Максимальная длина HTTP GET-запроса?

Какова максимальная длина HTTP-запроса GET? Существует ли ошибка ответа, которую сервер может/должен вернуть, если он получает запрос GET, превышает эту длину?

update:, как указано в тегах, это относится к API веб-сервиса, хотя интересно также видеть ограничения браузера.

Ответ 1

Предел зависит как от используемого сервера, так и от клиента (и, если применимо, также используется прокси-сервер, используемый сервером или клиентом).

Большинство веб-серверов имеют ограничение 8192 байта (8 КБ), которое обычно настраивается где-то в конфигурации сервера. Что касается вопроса о стороне клиента, спецификация HTTP 1.1 даже предупреждает об этом, здесь выдержка глава 3.2.1:

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

Предел в MSIE и Safari составляет около 2 КБ, в Opera около 4 КБ и в Firefox около 8 КБ. Таким образом, мы можем предположить, что 8KB является максимально возможной длиной и что 2KB является более доступной длиной, чтобы полагаться на стороне сервера, и что 255 байт является самой безопасной длиной, чтобы предположить, что весь URL-адрес войдет.

Если предел превышен как в браузере, так и на сервере, большинство из них просто урезает символы вне пределов без предупреждения. Однако некоторые серверы могут отправлять сообщение HTTP 414. Если вам нужно отправить большие данные, тогда лучше использовать POST вместо GET. Его предел намного выше, но больше зависит от используемого сервера, чем клиент. Средний размер веб-сервера разрешен до 2 ГБ. Это также настраивается где-то в настройках сервера. Средний сервер отображает ошибку/исключение для сервера, когда превышен предел POST, обычно как ошибка HTTP 500.

Ответ 2

Здесь вы задаете два вопроса:

Какова максимальная длина HTTP-запроса GET?

Как уже упоминалось, сам HTTP не налагает никаких жестко ограниченных ограничений на длину запроса; но у браузеров есть ограничения на 2kb - 8kb (255 байт, если мы считаем очень старые браузеры).

Существует ли ошибка ответа, которую сервер может/должен вернуть, если он получает запрос GET, превышает эту длину?

Тот, на кого никто не ответил.

HTTP 1.1 определяет код состояния 414 Request-URI Too Long для случаев, когда достигается предельный уровень сервера. Вы можете увидеть более подробную информацию о RFC 2616.

В случае ограничений, определенных клиентом, на сервере нет смысла возвращать что-то, потому что сервер вообще не получит запрос.

Надеюсь, что это поможет.

Ответ 3

Аналогичный вопрос здесь: Есть ли ограничение на длину запроса GET?

Я попал в лимит и на мою учетную запись хостинга, но браузер возвратил пустую страницу, прежде чем он попал на сервер, я думаю.

Ответ 4

Ограничения браузера:

Browser     Address bar   document.location  
                          or anchor tag
------------------------------------------
Chrome          32779           >64k      
Android          8192           >64k                         
Firefox          >64k           >64k      
Safari           >64k           >64k      
IE11             2047           5120   
Edge 16          2047          10240

хотите больше? см. этот вопрос о переполнении стека

Ответ 5

Технически я видел, что HttpGet будет иметь проблему, если длина URL-адреса превышает 2000 символов. В этом случае лучше использовать HttpPost или разделить URL-адрес.

Ответ 6

Как уже упоминалось, сам HTTP не налагает никаких жестко ограниченных ограничений на длину запроса; но у браузеров есть ограничения на 2048 символов, разрешенных в методе get.

Ответ 7

ПОЛУЧИТЬ ЗАПРОС, используя Chrome-браузер Да. Ограничений на запрос GET нет.

I am able to send ~4000 characters as part of the query string using chrome browser & curl command both. 

Я использую сервер tomcat 8.x, который возвратил ожидаемый ответ 200 OK.

Вот скриншот хром http-запроса (скрывающий конечную точку, которую я пытался по соображениям безопасности):

RESPONSE GET с помощью браузера Chrome