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.