Maximale Länge der HTTP-GET-Anforderung


487

Was ist die maximale Länge einer HTTP- GET- Anforderung?

Ist ein Antwortfehler definiert, den der Server zurückgeben kann / sollte, wenn er eine GET-Anforderung empfängt, die diese Länge überschreitet?

Dies steht im Zusammenhang mit einer Webdienst-API, obwohl es interessant ist, auch die Browserbeschränkungen zu sehen.



7
@KillianDS Es hat absolut nichts mit der maximalen Länge einer URL zu tun. Die Frage bezieht sich auf die maximale Länge einer Anfrage , die an eine URL gesendet wird .
Marquis von Lorne

2
@EJP Der 'Daten'-Inhalt eines GET ist nicht mehr als ein URI.
KillianDS

@ JimAho Ihr Kommentar ist auch ein Duplikat des ersten Kommentars .....
Jun711

Antworten:


463

Das Limit hängt sowohl vom verwendeten Server als auch vom verwendeten Client ab (und gegebenenfalls auch vom Proxy, den der Server oder der Client verwendet).

Die meisten Webserver haben ein Limit von 8192 Bytes (8 KB), das normalerweise irgendwo in der Serverkonfiguration konfiguriert werden kann. In Bezug auf die clientseitige Angelegenheit warnt die HTTP 1.1-Spezifikation sogar davor. Hier ist ein Auszug aus Kapitel 3.2.1 :

Hinweis: Server sollten in Abhängigkeit von URI-Längen über 255 Byte vorsichtig sein, da einige ältere Client- oder Proxy-Implementierungen diese Längen möglicherweise nicht ordnungsgemäß unterstützen.

Das Limit in Internet Explorer und Safari beträgt ca. 2 KB, in Opera ca. 4 KB und in Firefox ca. 8 KB. Wir können daher davon ausgehen, dass 8 KB die maximal mögliche Länge und 2 KB eine günstigere Länge sind, auf die Sie sich auf der Serverseite verlassen können, und dass 255 Byte die sicherste Länge sind, um davon auszugehen, dass die gesamte URL eingeht.

Wenn das Limit entweder im Browser oder auf dem Server überschritten wird, kürzen die meisten nur die Zeichen außerhalb des Limits ohne Vorwarnung. Einige Server senden jedoch möglicherweise einen HTTP 414-Fehler . Wenn Sie große Datenmengen senden müssen, verwenden Sie besser POST anstelle von GET. Das Limit ist viel höher, hängt jedoch stärker vom verwendeten Server ab als vom Client. Normalerweise erlaubt ein durchschnittlicher Webserver bis zu 2 GB. Dies kann auch irgendwo in den Servereinstellungen konfiguriert werden. Der durchschnittliche Server zeigt einen serverspezifischen Fehler / eine Ausnahme an, wenn das POST-Limit überschritten wird, normalerweise als HTTP 500-Fehler.


6
Sie beantworten die Frage in Bezug auf Browser-Einschränkungen. Wissen Sie, ob es Unterschiede zwischen GET und POST gibt (in Bezug auf die problematische Anforderungsgröße), wenn beispielsweise HttpClient für die Interaktion mit einem REST-Server verwendet wird?
Aioobe

3
Sicher, POST verwendet den Body, um die Daten zu senden. Die HTTP-Spezifikation legt keine bestimmte Größenbeschränkung für Posts fest.
Ignacio A. Poletti

1
Die HTTP-Spezifikationen erlauben es perfekt, einen Text in GET- und DELETE-Anforderungen einzufügen. Ich habe es in Java getestet und es funktioniert. Leider könnten auch hier wieder einige Proxys den ganzen Körper schneiden.
Nicolas Zozol

12
Die Get and Post-Methode hat eine ganz bestimmte Bedeutung. Die Verwendung eines POST zur Durchführung eines GET entspricht der Verwendung eines Hammers zum Brechen eines Eies.
Nohros

18
@nohros Das ist idealistisch wahr, aber GET hat auch Einschränkungen, die POST / PUT nicht haben. Angenommen, Sie möchten eine sehr lange Abfrage mit einer Reihe von IDs durchführen. Wenn Sie Hunderte von IDs auswählen, kann dies die Grenze der zulässigen URL-Größe überschreiten, während das Einfügen dieser Abfrage in einen POST dies vermeiden kann, auch wenn dies konzeptionell nicht so sinnvoll ist. Persönlich wünschte ich mir, HTTP erlaubte GET-Anfragen, Körper wie PUT und POST zu haben.
Devios1

143

Sie stellen hier zwei separate Fragen:

Was ist die maximale Länge einer HTTP-GET-Anforderung?

Wie bereits erwähnt, legt HTTP selbst keine fest codierte Begrenzung der Anforderungslänge fest. Browser haben jedoch Beschränkungen zwischen 2 KB und 8 KB (255 Bytes, wenn wir zählen sehr alte Browser zählen).

Ist ein Antwortfehler definiert, den der Server zurückgeben kann / sollte, wenn er eine GET-Anforderung empfängt, die diese Länge überschreitet?

Das ist derjenige, auf den niemand geantwortet hat.

HTTP 1.1 definiert den Statuscode 414 Request-URI Too Longfür die Fälle, in denen ein vom Server definiertes Limit erreicht wird. Weitere Details zu RFC 2616 finden Sie hier .

Für den Fall von vom Client definierten Grenzwerten hat der Server keinen Sinn, etwas zurückzugeben, da der Server die Anforderung überhaupt nicht empfängt.


23

Browser-Limits sind:

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

Mehr wollen? Siehe diese Frage zum Stapelüberlauf .



3

Technisch gesehen habe ich gesehen, dass HTTP GET Probleme haben wird, wenn die URL-Länge 2000 Zeichen überschreitet. In diesem Fall ist es besser, HTTP POST zu verwenden oder die URL zu teilen.


2

Wie bereits erwähnt, legt HTTP selbst keine fest codierte Begrenzung der Anforderungslänge fest. Browser haben jedoch Beschränkungen für das 2048-Zeichen, das in der GET-Methode zulässig ist.


-6

ERHALTEN SIE ANFRAGEN mit dem Chrome-Browser

Ja. Eine GET-Anfrage ist unbegrenzt.

Ich kann ~ 4000 Zeichen als Teil der Abfragezeichenfolge sowohl mit dem Chrome-Browser als auch mit dem Befehl curl senden.

Ich verwende einen Tomcat 8.x-Server, der die erwartete Antwort von 200 OK zurückgegeben hat.

Hier ist der Screenshot einer Google Chrome-HTTP-Anfrage (Ausblenden des Endpunkts, den ich aus Sicherheitsgründen versucht habe):

ANTWORT

GET mit dem Chrome-Browser

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.