Czy HTTP POST może być nieograniczone?

Odpowiedzi:

79

EDYCJA (2019) Ta odpowiedź jest teraz dość zbędna, ale jest inna odpowiedź z bardziej istotnymi informacjami.

Zależy to raczej od serwera WWW i przeglądarki internetowej:

Internet Explorer Wszystkie wersje 2 GB-1
Mozilla Firefox Wszystkie wersje 2 GB-1
IIS 1-5 2 GB-1
IIS 6 4 GB-1

Chociaż usługi IIS domyślnie obsługują tylko 200 KB, metabaza wymaga zmiany, aby to zwiększyć.

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

Sama metoda POST nie ma żadnego ograniczenia rozmiaru danych.

David Neale
źródło
zagłosuj na wzmiankę o Metabase.XML i wymieniłem różne sposoby zmiany limitu rozmiaru wysyłanych plików, ponieważ może to być przydatne.
Durai Amuthan.H
Wprowadzenie następującego polecenia w wierszu poleceń pomaga zwiększyć limit rozmiaru wysyłanego pliku. ”Cscript C: \ inetpub \ adminscripts \ adsutil.vbs set w3svc / ASPMaxRequestEntityAllowed 10484880" (w bajtach) odniesienie: serverintellect.com/support/iis/uploaddownload-size-limits -iis6
Durai Amuthan.H
lub znajdź metabase.xml w C: \ windows \ sytem32 \ inetserv \ ścieżka i edytuj, ale upewnij się, że włączono opcję Włącz bezpośrednią edycję metabazy. odniesienie: banmanpro.com/support2/file_upload_limits.asp
Durai Amuthan.H
lub w pliku web.config dodaj wiersz pod swoim system.web <httpRuntime ExecutionTimeout = "54000" maxRequestLength = "512000" /> weblogs.asp.net/mhawley/archive/2004/05/11/129824.aspx
Durai Amuthan.H
W przypadku obecnych serwerów internetowych (2019) zobacz tę odpowiedź .
Dan Dascalescu
87

Całkiem zdumiewające, jak wszystkie odpowiedzi mówią o IIS, jakby to był jedyny serwer sieciowy, który miał znaczenie. Już w 2010 roku, kiedy zadano to pytanie, Apache miał od 60% do 70% udziału w rynku . Tak czy inaczej,

  • Protokół HTTP nie określa limitu.
  • Metoda POST pozwala na przesłanie znacznie większej ilości danych niż metoda GET, która jest ograniczona długością adresu URL - około 2KB.
  • Maksymalny rozmiar treści żądania POST jest konfigurowany na serwerze HTTP i zwykle wynosi od
    1 MB do 2 GB
  • Klient HTTP (przeglądarka lub inny agent użytkownika) może mieć własne ograniczenia. Dlatego maksymalny rozmiar żądania treści POST to min(serverMaximumSize, clientMaximumSize).

Oto rozmiary treści POST dla niektórych bardziej popularnych serwerów HTTP:

Dan Dascalescu
źródło
4
Spośród odpowiedzi, które wspominają o serwerze internetowym, dwie wspominają o IIS, a jedna o Apache. W każdym razie zredagowałem moją odpowiedź na drogowskaz do Twojej, która jest bardziej kompletna i aktualna.
David Neale
3
Dziękuję @DavidNeale! Powinien istnieć odznaka :) Postaram się aktualizować tę odpowiedź. Właśnie dodałem maksimum dla nginx.
Dan Dascalescu
O tym: „więcej danych niż metoda GET, która jest ograniczona długością adresu URL - około 2 KB”. A co z nagłówkami? Z tego posta wynika, że ​​nagłówki pozwalają na około 8-16 KB.
Hans Vonn
27

Nie ma ograniczeń zgodnie z samym protokołem HTTP, ale implementacje będą miały praktyczny górny limit. Wysłałem dane przekraczające 4 GB za pomocą POST do Apache, ale niektóre serwery miały wówczas limit 4 GB.

Greg Hewgill
źródło
Czy 4 GB to nadal maksimum dla Apache? Ja odnalazłem to udokumentowane być 2GB.
Dan Dascalescu
@DanDascalescu: Nie wiem, dawno tego nie robiłem. Być może zaczęli nakładać górną granicę na LimitRequestBodydyrektywę.
Greg Hewgill
6

POST pozwala na wysyłanie danych na serwer o dowolnej długości, ale istnieją ograniczenia związane z limitami czasu / przepustowością itp.

Zasadniczo uważam, że bezpieczniej jest założyć, że wysyłanie dużej ilości danych nie jest w porządku.

Russ Clarke
źródło
3
Czy są jakieś praktyczne zasady określające, jak bardzo niebezpieczne jest przekroczenie limitu czasu i tym podobne?
vextorspace
3

Różne serwery internetowe IIS mogą przetwarzać różne ilości danych w „nagłówku”, zgodnie z tym (teraz usuniętym) artykułem; http://classicasp.aspfaq.com/forms/what-is-the-limit-on-form/post-parameters.html ;

Zwróć uwagę, że nie ma ograniczeń co do liczby elementów FORM, które można przekazać za pomocą POST, a jedynie do zagregowanego rozmiaru wszystkich par nazwa / wartość. Podczas gdy GET jest ograniczony do zaledwie 1024 znaków, dane POST są ograniczone do 2 MB w IIS 4.0 i 128 KB w IIS 5.0. Każda nazwa / wartość jest ograniczona do 1024 znaków, zgodnie ze specyfikacją SGML. Oczywiście nie dotyczy to plików przesyłanych za pomocą enctype = 'multipart / form-data' ... Nie miałem żadnych problemów z przesyłaniem plików w zakresie 90-100 MB przy użyciu IIS 5.0, poza koniecznością zwiększenia wartości server.scriptTimeout jak również moja cierpliwość!

Amelvin
źródło
1
Dobra edycja @Matt - pokazuje znaczenie wycinania najistotniejszych faktów zamiast ślepego łączenia
amelvin
1

W aplikacji, którą tworzyłem, napotkałem limit POST wynoszący około 2KB. Okazało się, że przypadkowo zakodowałem parametry w adresie URL zamiast przekazywać je w treści. Więc jeśli napotkasz tam problem, z pewnością istnieje bardzo mały limit rozmiaru danych POST, które możesz wysłać zakodowane do adresu URL.

brycejl
źródło
0

HTTP może nie mieć górnego limitu, ale serwery WWW mogą go mieć. W ASP.NET istnieje domyślny limit akceptacji wynoszący 4 MB, ale Ty (programista / webmaster) możesz go zmienić na wyższy lub niższy.

Hans Ke ing
źródło