максимальная длина HTTP GET-запроса? - PullRequest
443 голосов
/ 18 апреля 2010

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

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

Ответы [ 7 ]

422 голосов
/ 18 апреля 2010

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

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

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

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

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

137 голосов
/ 18 апреля 2010

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

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

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

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

На этот вопрос никто не ответил.

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

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

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

13 голосов
/ 24 мая 2018

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

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

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

4 голосов
/ 18 апреля 2010

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

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

3 голосов
/ 25 июня 2013

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

2 голосов
/ 08 июля 2016

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

0 голосов
/ 03 сентября 2017

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.

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

РЕАКЦИЯ GET using chrome browser

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