Gibt es eine praktische HTTP-Header-Längengrenze?
-
11-09-2019 - |
Frage
Ich habe eine Web-Anwendung, die auf XmlHttpRequest Objekte mit der setRequestHeader API. Ich verwende einen benutzerdefinierten Header-Namen (zum Beispiel X-Foo) und JSON strukturierten Wert. Es ist nicht Teil der URL Abfrage-Zeichenfolge oder POST-Körpers, weil es Meta-Informationen über die Anforderung ist.
Gibt es eine praktische Größe Grenze für den Header-Wert? Wenn meine JSON abgeschnitten wird, wird es unparseable. Ich bin sehr besorgt mit Grenzen in Apache 2, Tomcat 6 und IIS 7. Ich habe eine Google-Suche nach http-Header-Länge Grenze , aber viele der Ergebnisse datiert scheinen. Es gibt einige relevante Kommentare in Wie groß kann ein User-Agent-String bekommen? , aber nicht so genau wie ich möchte.
Edit: Ich lief über diese ähnliche Frage - Maximum auf HTTP-Header Werte
Lösung
Ja, aber die Grenzen sind konfigurierbar und abhängig von Plattform. Zum Beispiel Tomcat hat eine Standardlimit von 8K. Ich glaube, dass IIS 6, nicht sicher IIS 7, eine Grenze von 16 KB hat. Ich lief dies in, wenn für mehrere Web-Sites, die integrierte Windows-Authentifizierung. Es stellte sich meine Sicherheits-Token, war zu groß, wenn in den Header codiert. diese sind zum Glück konfigurierbar. Registrierungseinstellungen für IIS finden Sie unter http://support.microsoft.com/kb/820129 finden . Ich die wichtigsten Einstellungen glauben MaxFieldLength ändern (pro Kopfgröße) und MaxRequestBytes (Gesamtgröße der Anfrage).
Andere Tipps
Obwohl jede Web-Server-Software hat einige Einschränkungen, gibt es einen Unterschied, ob es eine Grenze für den HTTP-Request-Leitung und Header-Felder oder für jedes Header-Feld.
Hier ist eine Zusammenfassung:
So schließen: Um über alle Web-Server akzeptiert werden, ein Anfrage line plus Header des Anforderungsfelder nicht 8190 Bytes nicht überschreiten . Dies ist auch der Grenzwert für jede Header-Felder (effektiv sogar weniger).
Für Apache, fand ich diese Server Grenzwerte für Apache Sicherheit Artikel, der diese Richtlinien aufgeführt:
# allow up to 100 headers in a request
LimitRequestFields 100
# each header may be up to 8190 bytes long
LimitRequestFieldsize 8190
Für Nginx, die large_client_header_buffers Richtlinie von HttpCoreModule diese Kontrollen:
Die längste Kopfzeile der Anfrage muss auch nicht mehr als die Größe einen Puffer, da sonst der Kunde den Fehler "Bad Request" erhalten (400).
die Größe eines Puffers ist standardmäßig auf die Größe der Seite gleich, je nach Plattform dieses entweder 4K oder 8K
Während Sie den Server so konfigurieren können, ist es unwahrscheinlich, dass Sie wirklich den ganzen Weg durch Firewalls konfigurieren können, Loadbalancer und Proxies. die Kopfgröße klein zu halten hält Probleme weg.
Der Flash Media Server 4.5 verfügt über eine sehr kurze Standard-Header-Längengrenze, die der Server, insbesondere unter Umständen einfach nicht reagieren kann dazu führen, wo es eine moderate Cookie Last ist.
In der Flash Media Server Adaptor.xml Datei, die
MaxHeaderLineLength
Element bestimmt die Größe des HTTP-Header der Server verarbeiten kann. Der Standardwert fürMaxHeaderLineLength
ist 1024 Bytes. einige Browser ein Header größer als 1024 Bytes senden. In diesem Szenario Apache sendet eine leere Antwort zurück. Um dieses Problem zu beheben, konfigurierenMaxHeaderLineLength
bis 8192.. Hinweis: Standardmäßig ist die Apache HTTP-Header-Größenbeschränkung ist 8 KB (8190 Byte plus ein Wagenrücklauf)
Setzen dieses hier, falls die Kopfgröße auf dem Flash Media Server beißt jemand anderes.