Может ли HTTP POST быть безграничным?

Ответы:

75

РЕДАКТИРОВАТЬ (2019) Этот ответ теперь довольно избыточен, но есть еще один ответ с более актуальной информацией.

Это скорее зависит от веб-сервера и веб-браузера:

Internet Explorer Все версии 2 ГБ-1
Mozilla Firefox Все версии 2 ГБ-1
IIS 1-5 2 ГБ-1
IIS 6 4 ГБ-1

Хотя IIS по умолчанию поддерживает только 200 КБ, в метабазу необходимо внести изменения, чтобы увеличить это значение.

http://www.motobit.com/help/scptutl/pa98.htm

Сам метод POST не имеет ограничений на размер данных.

Дэвид Нил
источник
Проголосуйте за упоминание Metabase.XML, и я перечислил различные способы изменить ограничение размера загружаемого файла, потому что это может быть полезно.
Durai Amuthan.H
Ввод следующей команды в командной строке помогает увеличить предельный размер загружаемого файла. "Cscript C: \ inetpub \ adminscripts \ adsutil.vbs set w3svc / ASPMaxRequestEntityAllowed 10484880" (в байтах) ссылка: serverintellect.com/support/iis/uploaddownload-size-limits -iis6
Durai Amuthan.H
или найдите файл metabase.xml в папке C: \ windows \ sytem32 \ inetserv \ и отредактируйте, но убедитесь, что включен параметр «Включить прямое редактирование метабазы». ссылка
Durai Amuthan.H
или в вашем файле web.config добавьте строку под system.web <httpRuntime ExecutionTimeout = "54000" maxRequestLength = "512000" /> weblogs.asp.net/mhawley/archive/2004/05/11/129824.aspx
Durai Amuthan.H
Для текущих (2019 г.) веб-серверов см. Этот ответ .
Дэн Даскалеску
76

Удивительно, как во всех ответах говорится об IIS, как если бы это был единственный имеющий значение веб-сервер. Даже в 2010 году, когда был задан вопрос, Apache занимал от 60% до 70% доли рынка . Тем не мение,

  • Протокол HTTP не устанавливает ограничения.
  • Метод POST позволяет отправлять гораздо больше данных, чем метод GET, который ограничен длиной URL. - около 2 КБ.
  • Максимальный размер тела запроса POST настраивается на HTTP-сервере и обычно составляет от
    1 МБ до 2 ГБ.
  • HTTP-клиент (браузер или другой пользовательский агент) может иметь свои ограничения. Следовательно, максимальный размер тела запроса POST составляет min(serverMaximumSize, clientMaximumSize).

Вот размеры тела POST для некоторых наиболее популярных HTTP-серверов:

Дэн Даскалеску
источник
4
Из ответов, в которых упоминается веб-сервер, в двух упоминается IIS, а в одном упоминается Apache. Во всяком случае, я отредактировал свой ответ на указатель в сторону вашего, который является более полным и актуальным.
Дэвид Нил
3
Спасибо, @DavidNeale! Для этого должен быть значок :) Я постараюсь обновлять этот ответ. Просто добавил максимум для nginx.
Дэн Даскалеску
Об этом: «данных больше, чем у метода GET, который ограничен длиной URL - около 2 КБ». А что насчет заголовков? Согласно этому сообщению , заголовки позволяют разместить около 8-16 КБ.
Hans
27

В соответствии с самим протоколом HTTP ограничений нет, но у реализаций будет практический верхний предел. Я отправил данные, превышающие 4 ГБ, с помощью POST в Apache, но на некоторых серверах в то время было ограничение в 4 ГБ.

Грег Хьюгилл
источник
4 ГБ все еще максимум для Apache? Я обнаружил, что это 2 ГБ.
Дэн Даскалеску
@DanDascalescu: Не знаю, я давно этим не занимался. Возможно, они начали вводить верхний предел LimitRequestBodyдирективе.
Грег Хьюгилл
6

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

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

Расс Кларк
источник
2
Есть ли какие-то практические правила относительно того, насколько опасны тайм-ауты и тому подобное?
vextorspace
3

Согласно этой (теперь удаленной) статье, разные веб-серверы IIS могут обрабатывать разные объемы данных в «заголовке»; http://classicasp.aspfaq.com/forms/what-is-the-limit-on-form/post-parameters.html ;

Обратите внимание, что нет ограничений на количество элементов FORM, которые вы можете передать через POST, но только на совокупный размер всех пар имя / значение. В то время как GET ограничен 1024 символами, данные POST ограничены 2 МБ в IIS 4.0 и 128 КБ в IIS 5.0. Каждое имя / значение ограничено 1024 символами в соответствии со спецификацией SGML. Конечно, это не относится к файлам, загруженным с помощью enctype = 'multipart / form-data' ... У меня не было проблем с загрузкой файлов размером 90–100 МБ с использованием IIS 5.0, кроме необходимости увеличивать значение server.scriptTimeout а также мое терпение!

Амельвин
источник
1
Хорошая редакция @Matt - показывает важность вырезания основных фактов, а не
слепых
1

В приложении, которое я разрабатывал, я столкнулся с тем, что, казалось, было ограничением POST около 2 КБ. Оказалось, что я случайно кодировал параметры в URL вместо того, чтобы передавать их в теле. Поэтому, если вы столкнетесь с проблемой, определенно существует очень маленький предел размера данных POST, которые вы можете отправлять в кодировке в URL-адрес.

Brycejl
источник
0

HTTP может не иметь верхнего предела, но у веб-серверов он может быть. В ASP.NET есть ограничение по умолчанию, равное 4 МБ, но вы (разработчик / веб-мастер) можете изменить это значение на большее или меньшее.

Ханс Кеинг
источник