Maksymalna długość żądania HTTP GET


487

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

Czy zdefiniowano 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 interfejsu API usługi internetowej, chociaż interesujące jest również ograniczenie przeglądarki.



7
@KillianDS Nie ma absolutnie nic wspólnego z maksymalną długością adresu URL. Pytanie dotyczy maksymalnej długości żądania wysyłanego na adres URL.
— Markiz Lorne

2
@EJP zawartość „danych” GET to nie więcej niż identyfikator URI.
— KillianDS

@JimAho również twój komentarz jest duplikatem pierwszego komentarza .....
— Jun711

Odpowiedzi:


463

Limit zależy zarówno od używanego serwera, jak i klienta (i, w stosownych przypadkach, także od serwera proxy, z którego korzysta serwer lub klient).

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

Uwaga: serwery powinny zachować ostrożność w zależności od długości identyfikatora URI powyżej 255 bajtów, ponieważ niektóre starsze implementacje klienta lub serwera proxy mogą nie obsługiwać tych długości.

Limit w Internet Explorerze i Safari wynosi około 2 KB, w Operze około 4 KB, aw Firefoksie około 8 KB. Możemy zatem założyć, że 8 KB to maksymalna możliwa długość i że 2 KB to bardziej przystępna długość, 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 na serwerze, większość po prostu obetnie znaki poza limitem bez żadnego ostrzeżenia. Niektóre serwery mogą jednak wysyłać błąd HTTP 414 . Jeśli chcesz wysłać duże dane, lepiej użyj POST zamiast GET. Jego limit jest znacznie wyższy, ale bardziej zależy od używanego serwera niż klienta. Zwykle serwer WWW pozwala na maksymalnie około 2 GB. Można to również skonfigurować gdzieś w ustawieniach serwera. Przeciętny serwer wyświetli błąd / wyjątek specyficzny dla serwera, gdy limit POST zostanie przekroczony, zwykle jako błąd HTTP 500.


6
Odpowiadasz na pytanie dotyczące ograniczeń przeglądarki. Czy wiesz, czy istnieją jakieś różnice między GET i POST (pod względem problematycznego rozmiaru żądania), jeśli powiedzmy, że HttpClient jest używany do interakcji z serwerem REST?
— aioobe,

3
Jasne, POST używa ciała do wysłania danych. Specyfikacja HTTP nie nakłada określonego limitu rozmiaru postów.
— Ignacio A. Poletti,

1
Specyfikacja Http doskonale zezwala na umieszczanie treści w żądaniach GET i DELETE. Przetestowałem to w Javie i działa. Niestety tutaj znowu niektórzy pośrednicy mogą przeciąć całe ciało.
— Nicolas Zozol

12
Metoda Get and Post ma bardzo konkretne znaczenie, więc użycie POST do wykonania GET jest takie samo, jak użycie młota do rozbicia jajka.
— nohros

18
@ nohros To idealistycznie prawda, ale GET ma również ograniczenia, których nie mają POST / PUT. Załóżmy na przykład, że chcesz wykonać bardzo długie zapytanie obejmujące kilka identyfikatorów; jeśli wybierzesz setki identyfikatorów, może to przekroczyć limit dozwolonego rozmiaru adresu URL, a umieszczenie tego zapytania w POST może tego uniknąć, nawet jeśli nie ma to tak dużego sensu koncepcyjnego. Osobiście chciałbym, aby HTTP dozwolone żądania GET miały treści takie jak PUT i POST.
— devios1

143

Zadajesz tutaj dwa osobne pytania:

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

Jak już wspomniano, sam HTTP nie narzuca żadnego sztywnego limitu długości żądania; ale przeglądarki mają limity od 2 KB do 8 KB (255 bajtów, jeśli liczymy bardzo stare przeglądarki).

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

Tego nikt nie odpowiedział.

HTTP 1.1 określa kod statusu 414 Request-URI Too Longdla przypadków, w których osiągnięty został limit zdefiniowany przez serwer. Możesz zobaczyć dalsze szczegóły na temat RFC 2616 .

W przypadku limitów zdefiniowanych przez klienta nie ma sensu, aby serwer coś zwracał, ponieważ serwer w ogóle nie otrzyma żądania.


23

Limity 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

Chcieć więcej? Zobacz to pytanie na temat przepełnienia stosu .



3

Technicznie widziałem, że HTTP GET będzie miał problemy, jeśli długość adresu URL przekroczy 2000 znaków. W takim przypadku lepiej użyć HTTP POST lub podzielić adres URL.


2

Jak już wspomniano, sam HTTP nie narzuca żadnego sztywnego limitu długości żądania; ale przeglądarki mają ograniczenia od 2048 znaków dozwolone w metodzie GET.


-6

UZYSKAJ ZAPYTANIE za pomocą przeglądarki Chrome

Tak. Żądanie GET nie ma limitu.

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

Korzystam z serwera Tomcat 8.x, który zwrócił oczekiwaną odpowiedź 200 OK.

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

ODPOWIEDŹ

POBIERZ za pomocą przeglądarki Chrome

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.