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

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

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

7 ответов


ограничение зависит как от сервера, так и от используемого клиента (и, если применимо, также от прокси-сервера или клиента).

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

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

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

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


вы задаете здесь два отдельных вопроса:

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

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

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

это никто не ответил.

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

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

надеюсь, что это помогает.


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

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


пределы браузера:

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

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


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


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


GET REQUEST using chrome browserда. Нет ограничений на запрос 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-запроса chrome (скрытие конечной точки, которую я пробовал из соображений безопасности):

ответGET using chrome browser