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ść?

Jest to w kontekście API usług internetowych, chociaż interesujące jest również wyświetlanie limitów przeglądarki.

Author: Peter Mortensen, 2010-04-17

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 WWW ma limit 8192 bajtów (8 KB), który jest zwykle konfigurowalny 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ż niektóre starsze implementacje klientów lub proxy mogą nie obsługiwać poprawnie tych długości.

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

Jeśli limit zostanie przekroczony w przeglądarka lub serwer, większość po prostu obetnie znaki poza limitem bez 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. Zazwyczaj Przeciętny serwer WWW dopuszcza do około 2 GB. Jest to również konfigurowalne gdzieś w ustawieniach serwera. Przeciętny serwer wyświetli błąd/wyjątek specyficzny dla serwera, gdy limit POST został przekroczony, zwykle jako błąd HTTP 500.

 486
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
2020-01-22 23:48:04

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 2 KB do 8 KB(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 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.

 149
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
2020-01-22 23:56:46

Ograniczenia przeglądarki to:

Browser           Address bar    document.location
                                 or anchor tag
---------------------------------------------------
Chrome                32779           >64k
Android                8192           >64k
Firefox                >64k           >64k
Safari                 >64k           >64k
Internet Explorer 11   2047           5120
Edge 16                2047          10240
Chcesz więcej? Zobacz to pytanie na Stack Overflow .
 31
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
2020-01-23 00:28:15

Podobne pytanie jest 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.

 5
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
2020-01-22 23:53:49

Technicznie, widziałem HTTP GET będzie miał problemy, jeśli długość URL przekracza 2000 znaków. W takim przypadku lepiej jest użyć postu HTTP 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
2020-01-23 00:06:14

Jak już wspomniano, sam HTTP nie nakłada żadnych zakodowanych ograniczeń długości żądania; ale przeglądarki mają limity w zakresie 2048 znaków dozwolone w metodzie GET.

 2
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
2020-01-23 00:17:40

Pobierz żądanie za pomocą przeglądarki Chrome

Tak. Nie ma limitu na żądanie GET.

Jestem w stanie wysłać ~4000 znaków jako część ciągu zapytania za pomocą przeglądarki Chrome i polecenia curl.

Używam Tomcat 8.serwer x, który zwrócił oczekiwaną odpowiedź OK 200.

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

Odpowiedź

Korzystaj z przeglądarki Chrome

 -4
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
2020-01-23 00:26:00