Максимальная длина HTTP GET-запроса?
Какова максимальная длина HTTP GET-запроса? Определена ли ошибка ответа, которую сервер может / должен вернуть, если он получает запрос GET, превышающий эту длину?
обновление: как указано в тегах, это происходит в контексте API веб-службы, хотя интересно также увидеть ограничения браузера.
7 ответов
Ограничение зависит как от сервера, так и от используемого клиента (и, если применимо, также от прокси-сервера, который использует сервер или клиент).
Большинство веб-серверов имеют ограничение 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.
Вы задаете два отдельных вопроса здесь:
Какова максимальная длина HTTP GET-запроса?
Как уже упоминалось, HTTP сам по себе не накладывает жестко заданного ограничения на длину запроса; но браузеры имеют ограничения в пределах от 2 до 8 КБ (255 байт, если считать очень старые браузеры).
Определена ли ошибка ответа, которую сервер может / должен вернуть, если он получает запрос GET, превышающий эту длину?
Это тот, на кого никто не ответил.
HTTP 1.1 определяет код статуса 414 Request-URI Too Long
для случаев, когда достигнут определенный сервером предел. Вы можете увидеть более подробную информацию о RFC 2616.
В случае определенных клиентом ограничений нет смысла возвращать что-либо серверу, поскольку сервер вообще не получит запрос.
Надеюсь это поможет.
Ограничения браузера:
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
хочу больше? см. этот вопрос на переполнении стека
Подобный вопрос здесь: есть ли ограничение на длину запроса GET?
Я достиг предела и на моей учетной записи общего хостинга, но я думаю, что браузер вернул пустую страницу, прежде чем он попал на сервер.
Технически я видел, что HttpGet будет иметь проблемы, если длина URL превышает 2000 символов. В этом случае лучше использовать HttpPost или разделить URL.
Как уже упоминалось, HTTP сам по себе не накладывает жестко заданного ограничения на длину запроса; но браузеры имеют ограничения в пределах 2048 символов, разрешенных в методе get.
Да. Нет ограничений на запрос 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 (скрытие конечной точки, которую я пробовал по соображениям безопасности):