Максимальная длина 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.