Jaki jest limit rozmiaru żądania postu?


268

Przepraszam, jeśli jest to duplikat, pomyślałbym, że tak, ale nic nie można znaleźć.

Mam aplikację elastyczną, która wysyłam dane z powrotem do serwera php / mysql za pośrednictwem IE. Nie napotkałem jeszcze żadnych problemów, ale wiedza o tym z wyprzedzeniem może uratować mnie od frustracji i pracy. Czy istnieje limit rozmiaru wysyłania danych przez http?

W tym artykule jest napisane nie: http://www.netlobo.com/ie_form_submit.html

Ta dyskusja mówi tak: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

A wszystko idzie tam iz powrotem, co mogę znaleźć w Internecie. Prosimy więc ograniczyć odpowiedzi do osobiście przetestowanych / zweryfikowanych numerów.

Chcę przesłać z powrotem ciąg XML, który może być dość duży (powiedzmy do 5 MB).

Jeśli robi to jakąkolwiek różnicę: przeglądarką zawsze będzie IE (wymaga tego nasz produkt), poczta pochodzi i httpService w wersji flex, serwer WWW to php, DB to mySql.


Odpowiedzi:


203

To zależy od konfiguracji serwera. Jeśli pracujesz z PHP pod Linuksem lub podobnym, możesz kontrolować go za pomocą pliku konfiguracyjnego .htaccess, tak jak:

#set max post size
php_value post_max_size 20M

I tak, mogę osobiście potwierdzić, że to działa :)

Jeśli używasz usług IIS, nie mam pojęcia, jak ustawić tę konkretną wartość.


3
Gdzie jest to post_max_sizeustawienie? Jestem raczej nowy w php i nie mogę go znaleźć nigdzie w naszej bazie kodu (używając procesu znajdowania snów we wszystkich). Zapytałbym naszych administratorów systemu, ale są wredni. :-P
invertedSpear

10
Czy możesz więc ustawić tę wartość na dowolny rozmiar? Czy nie ma żadnych ograniczeń protokołu? Czy możesz ustawić na 99999999999999999999999M?
Para

8
@Para - Ten post mówi, że możesz ustawić go tak wysoko, jak pamięć urządzenia. Mówi także, że domyślnie jest to 2 MB.
RustyTheBoyRobot

37
Ponieważ jest to PHP, spodziewałem się, że zaakceptuje dowolną wartość i po prostu SEGFAULT, gdy osiągnie limit twojej maszyny ....
RustyTheBoyRobot

12
Ponadto w pliku PNP.INI znajduje się ustawienie: max_input_vars, które w mojej wersji PHP: 5.4.16 ma domyślną wartość 1000. Z instrukcji: „Ile zmiennych wejściowych można zaakceptować (limit jest stosowany do $ _GET, $ _POST i $ _COOKIE superglobal osobno) "Ref .: php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikołaj Iwanow

73

Część adresu URL żądania (GET i POST) może być ograniczona zarówno przez przeglądarkę, jak i serwer - ogólnie bezpieczny rozmiar to 2 KB, ponieważ prawie nie ma przeglądarek ani serwerów, które używają mniejszego limitu.

Treść żądania (POST) jest zwykle * ograniczona przez serwer w oparciu o rozmiar bajtu, aby zapobiec typowi ataku DoS (należy pamiętać, że oznacza to, że ucieczka znaków może zwiększyć rozmiar bajtu ciała). Najczęstszym ustawieniem serwera jest 10 MB, chociaż wszystkie popularne serwery pozwalają go zwiększać lub zmniejszać za pomocą pliku ustawień lub panelu.

* Istnieją pewne wyjątki od starszych przeglądarek telefonów komórkowych lub innych małych urządzeń - w takich przypadkach jest to bardziej funkcja miejsca na stercie zarezerwowana do tego celu na urządzeniu niż cokolwiek innego.


2
Opowiedz coś o limitach przeglądarki, biorąc pod uwagęcurl
Yugal Jindle

12
Wiem, że jestem nieco opóźniony, ale takie odpowiedzi są powodem, dla którego uwielbiam StackOverflow. Ponad to, co jest wymagane i dostarcza cennych informacji.
Dormouse


14

Możesz opublikować dużą ilość danych, ustawiając zmienną php.ini: max_input_vars Domyślny rozmiar tej zmiennej to 1000, ale jeśli chcesz wysłać dużą ilość danych, musisz odpowiednio zwiększyć rozmiar. Jeśli nie możesz ustawić rozmiaru z ini_set, musisz to zrobić bezpośrednio htaccesslub poprzez zmiany w pliku php.ini.

max_input_vars  2500
memory_limit    256M

5

Jak zauważył David, w większości przypadków wybrałbym KB.

php_value post_max_size 2KB

Uwaga: mój formularz jest prosty, tylko kilka pól tekstowych, a nie długi tekst.


2

Domyślnie maksymalny rozmiar żądania wysyłania wynosi 8 MB. Ale możesz go zmodyfikować zgodnie ze swoimi wymaganiami. Modyfikacji można dokonać, otwierając plik php.ini (ustawienie konfiguracji php).

Odnaleźć

post_max_size=8M  //for me, that was on line:771

wymień 8 zgodnie z Twoimi wymaganiami.


1

To serwer http decyduje, czy istnieje limit. Produkt, nad którym pracuję, pozwala administratorowi skonfigurować limit.


Ponadto w pliku PNP.INI znajduje się ustawienie: max_input_vars, które w mojej wersji PHP: 5.4.16 ma domyślną wartość 1000. Z instrukcji: „Ile zmiennych wejściowych może zostać zaakceptowanych (limit jest stosowany do $ _GET, $ _POST i $ _COOKIE superglobal osobno) ”Ref .: [ php.net/manual/en/info.configuration.php#ini.max-input-vars][1] [1]: php.net/manual/en/info.configuration .php # ini.max-input-vars
Nikołaj Iwanow

1

Jednym z najlepszych rozwiązań w tym zakresie jest to, że nie używasz wielu lub więcej niż 1000 pól wprowadzania. Możesz połączyć wiele danych wejściowych z dowolnym znakiem specjalnym, np. @.

Zobacz:

<input type='text' name='hs1' id='hs1'>
<input type='text' name='hs2' id='hs2'>
<input type='text' name='hs3' id='hs3'>
<input type='text' name='hs4' id='hs4'>
<input type='text' name='hs5' id='hs5'>

<input type='hidden' name='hd' id='hd'>

Za pomocą dowolnego skryptu (JavaScript lub JScript),

document.getElementById("hd").value = document.getElementById("hs1").value+"@"+document.getElementById("hs2").value+"@"+document.getElementById("hs3").value+"@"+document.getElementById("hs4").value+"@"+document.getElementById("hs5").value

Dzięki temu obejdziesz max_input_varsproblem. Zwiększenie max_input_varspliku php.ini jest szkodliwe dla serwera, ponieważ zużywa więcej pamięci podręcznej serwera, co czasami może spowodować awarię serwera.


1
Nie widzę, jak zmienne konkatenujące oszczędzają pamięć. Każdy znak ASCII wykorzystuje 1 bajt pamięci. Łańcuch (technicznie tablica char, jeśli się nie mylę) używa n * 1 bajtów z n jako długością łańcucha. Dlaczego dodanie innej postaci zmniejszy ilość używanej pamięci? W tym obliczeniu dodajesz kolejny bajt dla każdego „@” dodawanego do ciągu. Oczywiście zmniejszasz liczbę używanych zmiennych, ale płacisz za to „wygraną” dodatkową pracą dzieląc je ponownie.
DBX12

2
@ DBX12 Chociaż nie oszczędzasz pamięci dzięki tej sztuczce, możesz ominąć max_input_varsopcję w php.initym. Nie do końca to, o co pytano, ale wciąż przydatne.
RicoBrassers

Przekroczenie limitu rozmiaru zależy od dwóch czynników: po pierwsze, rozmiaru pojedynczego klucza / wartości ciągu znaków, tj. Liczby znaków po stronie klucza i / lub wartości. po drugie, ilość par klucz / wartość, nawet jeśli każda para ma małą liczbę znaków. Ogólnie dwa powyższe czynniki kończą się przekroczeniem limitu rozmiaru. Tak więc, dla mnie, ta odpowiedź jest poprawna i związana z pytaniem i podkreśla jedną stronę problemu.
Elnur Shabanov

0

Dla programistów, którzy nie mogą zmienić konfiguracji php z powodu hostingu. (Moje ustawienia Maksymalny rozmiar 256 MB, maks. 1000 zmiennych)

Mam ten sam problem, że tylko 2 z 5 dużych obiektów danych (tablice asocjacyjne) z podstrukturami otrzymano po stronie serwera.

Dowiaduję się, że cała konstrukcja jest „spłaszczona” w żądaniu postu. Tak więc jeden obiekt staje się setkami zmiennych dosłownych. Na koniec, zamiast 5 zmiennych obiektowych, w rzeczywistości wysyła dziesiątki setek zmiennych elementarnych.

Rozwiązaniem w tym przypadku jest serializacja każdej z podstruktur w łańcuch. Następnie jest odbierany na serwerze jako 5 zmiennych łańcuchowych. Przykład: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.