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


488

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

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

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



7
@KillianDS Это не имеет абсолютно ничего общего с максимальной длиной URL. Вопрос о максимальной длине запроса, который отправляется на URL.
Маркиз Лорн

2
@EJP содержимое данных в GET не больше, чем URI.
KillianDS

@JimAho ваш комментарий тоже дублирует первый комментарий .....
Jun711

Ответы:


464

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

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

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

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

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


6
Вы отвечаете на вопрос с точки зрения ограничений браузера. Знаете ли вы, есть ли какие-либо различия между GET и POST (с точки зрения размера проблемных запросов), если, скажем, HttpClient используется для взаимодействия с сервером REST?
aioobe

3
Конечно, POST использует тело для отправки данных. Спецификация HTTP не накладывает определенного ограничения на размер сообщений.
Игнасио А. Полетти

1
Спецификации Http позволяют использовать тело в запросах GET и DELETE. Я проверил это на Java, и это работает. К сожалению, и здесь некоторые прокси могут разрезать все тело.
Николас Зозол

12
Метод Get and Post имеет очень специфическое значение, поэтому использование POST для выполнения GET аналогично использованию молотка для разбивания яйца.
нохрос

18
@nohros Это идеалистически верно, но GET также имеет ограничения, которых нет у POST / PUT. Например, предположим, что вы хотите выполнить очень длинный запрос, включающий несколько идентификаторов; если вы выбираете сотни идентификаторов, это может нарушить предел допустимого размера URL, тогда как помещение этого запроса в POST может этого избежать, даже если концептуально это не имеет особого смысла. Лично я бы хотел, чтобы у HTTP-запросов GET были такие же тела, как PUT и POST.
devios1

143

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

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

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

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

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

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

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




3

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


2

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


-6

ПОЛУЧИТЬ ЗАПРОС, используя браузер Chrome

Да. Нет никаких ограничений на запрос GET.

Я могу отправить ~ 4000 символов как часть строки запроса, используя браузер Chrome и команду curl.

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

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

ОТВЕТ

ПОЛУЧИТЬ используя браузер Chrome

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.