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.

Mark Harrison
źródło
10
możliwy duplikat Jaka jest maksymalna długość adresu URL?
KillianDS,
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.

BalusC
źródło
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.

Edurne Pascual
źródło
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 .

Jiraff537
źródło
5

Podobne pytanie jest tutaj: czy istnieje limit długości żądania GET?

Osiągnąłem limit i na moim współdzielonym koncie hostingowym, ale myślę, że przeglądarka zwróciła pustą stronę, zanim dotarła na serwer.

sójka
źródło
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.

MSIslam
źródło
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.

Sandeep Kumar
źródło
-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

Lokendra Chauhan
źródło