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.
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.
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.
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 .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.
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.
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.
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
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ź
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