maksymalna długość żądania HTTP GET?

Jaka jest maksymalna długość żądania HTTP GET? Czy jest zdefiniowany błąd odpowiedzi, który serwer może/powinien zwrócić, jeśli otrzyma żądanie GET przekraczające tę długość?

Update: Jak wskazano w tagach, jest to w kontekście interfejsu API usługi internetowej, chociaż interesujące jest również wyświetlanie limitów przeglądarki.

Author: Mark Harrison, 2010-04-18

7 answers

Limit zależy zarówno od serwera, jak i użytego klienta (i jeśli ma to zastosowanie, również od proxy, z którego korzysta serwer lub klient).

Większość serwerów ma limit 8192 bajtów (8KB), który zwykle można skonfigurować gdzieś w konfiguracji serwera. Jeśli chodzi o sprawy po stronie klienta, Specyfikacja HTTP 1.1 ostrzega nawet o tym, oto fragment rozdziału 3.2.1:

Uwaga: serwery powinny być ostrożne w zależności od długości URI powyżej 255 bajtów, ponieważ jakiś starszy klient lub proxy implementacje mogą nie obsługiwać odpowiednio tych długości.

Limit wynosi w MSIE i Safari około 2KB, w Operze około 4KB, a w Firefoksie około 8KB. Możemy więc założyć, że 8KB jest maksymalną możliwą długością i że 2KB jest bardziej przystępną długością, na której można polegać po stronie serwera i że 255 bajtów jest najbezpieczniejszą długością, aby założyć, że cały URL wejdzie.

Jeśli limit zostanie przekroczony w przeglądarce lub w serwer, większość po prostu obetnie znaki poza limitem bez żadnego ostrzeżenia. Niektóre serwery mogą jednak wysłać błąd HTTP 414 . Jeśli chcesz wysłać Duże dane, lepiej Użyj POST zamiast GET. Jego limit jest dużo wyższy, ale bardziej zależny od używanego serwera niż Klienta. Zwykle Przeciętny serwer WWW dopuszcza do około 2 GB. Można to również skonfigurować gdzieś w ustawieniach serwera. Przeciętny serwer wyświetli konkretny serwer błąd / wyjątek po przekroczeniu limitu POST, zwykle jako błąd HTTP 500.

 396
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-17 20:53:35

Zadajesz dwa oddzielne pytania:

Jaka jest maksymalna długość żądania HTTP GET?

Jak już wspomniano, sam HTTP nie nakłada żadnych ograniczeń na długość żądania; ale przeglądarki mają limity od 2kb do 8kb(255 bajtów, jeśli liczymy bardzo stare przeglądarki).

Czy jest zdefiniowany błąd odpowiedzi, który serwer może/powinien zwrócić, jeśli otrzyma żądanie GET przekraczające tę długość?

to jest nikt nie odpowiedział.

HTTP 1.1 definiuje kod statusu 414 Request-URI Too Long dla przypadków, w których został osiągnięty limit zdefiniowany przez serwer. Możesz zobaczyć więcej szczegółów na RFC 2616 .

W przypadku limitów zdefiniowanych przez Klienta, nie ma sensu zwracać czegoś na serwerze, ponieważ serwer w ogóle nie otrzyma żądania.

Mam nadzieję, że to pomoże.
 131
Author: Edurne Pascual,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-13 20:54:53

Podobne pytanie tutaj: Czy istnieje ograniczenie długości żądania GET?

Osiągnąłem limit i na moim współdzielonym koncie hostingowym, ale przeglądarka zwróciła pustą stronę, zanim trafiła na serwer.

 4
Author: jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:53

Ograniczenia przeglądarki to:

Browser     Address bar   document.location  
                          or anchor tag
------------------------------------------
Chrome          32779           >64k      
Android          8192           >64k                         
Firefox          >64k           >64k      
Safari           >64k           >64k      
IE11             2047           5120   
Edge 16          2047          10240
Chcesz więcej? Zobacz to pytanie na Stack Overfollow
 4
Author: Jiraff537,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-24 13:05:30

Technicznie widziałem HttpGet będzie miał problem, jeśli długość URL przekracza 2000 znaków. W takim przypadku lepiej jest użyć HttpPost lub podzielić adres URL.

 3
Author: MSIslam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-25 19:39:31

Jak już wspomniano, sam HTTP nie nakłada żadnych ograniczeń na długość żądania; ale przeglądarki mają ograniczenia w zakresie 2048 znaków dozwolonych w metodzie get.

 1
Author: Sandeep Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-08 13:41:37

Pobierz wniosek za pomocą przeglądarki chromeTak. Nie ma limitu na żądanie GET.

I am able to send ~4000 characters as part of the query string using chrome browser & curl command both. 
Używam tomcat 8.serwer X, który zwrócił oczekiwał 200 odpowiedzi OK.

Oto zrzut ekranu żądania HTTP chrome (ukrywanie punktu końcowego, którego próbowałem ze względów bezpieczeństwa):

ODPOWIEDŹPobierz za pomocą przeglądarki chrome

 -2
Author: Lokendra Chauhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-03 16:11:33