it-swarm.com.de

Gibt es ein praktisches Längenlimit für HTTP-Header?

Ich habe eine Webanwendung, die Kontextinformationen zu XmlHttpRequest -Objekten mithilfe der setRequestHeader -API hinzufügt. Ich verwende einen benutzerdefinierten Headernamen (z. B. X-Foo) und einen strukturierten Wert JSON . Es ist nicht Teil des URL QueryString oder POST body, da es sich um Metainformationen zu der Anforderung handelt.

Gibt es eine praktische Größenbeschränkung für den Header-Wert? Wenn mein JSON abgeschnitten wird, kann er nicht mehr analysiert werden. Ich beschäftige mich am meisten mit Limits in Apache 2, Tomcat 6 und IIS 7. Ich habe eine Google-Suche nach http-Header-Längenlimit durchgeführt, aber viele der Ergebnisse datiert scheinen. Es gibt einige relevante Kommentare in Wie groß kann ein User-Agent-String werden? aber nicht so spezifisch, wie ich es gerne hätte.

Edit: Ich bin gerade auf diese ähnliche Frage gestoßen - Maximum auf http-Header-Werten?

70
Kevin Hakanson

Ja, aber die Grenzwerte sind konfigurierbar und plattformabhängig. Beispiel: Tomcat hat ein Standardlimit von 8 KB. Ich glaube, dass IIS 6, nicht sicher, ob IIS 7) ein Limit von 16 KB hat. Ich bin darauf gestoßen, als ich die integrierte Windows-Authentifizierung für mehrere Websites verwendete. Es stellte sich heraus, dass mein Sicherheitstoken bei der Codierung im Header zu groß war. Glücklicherweise sind diese konfigurierbar. Die Registrierungseinstellungen für IIS finden Sie unter http://support.Microsoft.com)/kb/820129 . Ich glaube, die zu ändernden Schlüsseleinstellungen sind MaxFieldLength (pro Headergröße) und MaxRequestBytes (Gesamtgröße der Anforderung).

50
tvanfosson

Obwohl jede Webserver-Software einige Einschränkungen aufweist, gibt es einen Unterschied, ob für die Header-Felder HTTP-Anforderungszeile plus oder für jedes Header-Feld eine Beschränkung gilt.

Hier ist eine Zusammenfassung:

  • Apache 1. , 2. , 2.2 , 2. : 8190 Bytes (für jedes Headerfeld)
  • IIS:
    • 4. : 2097152 Bytes (für die Anforderungszeile plus Header-Felder)
    • 5. : 131072 Bytes , 16384 Bytes mit Windows 2000 Service Pack 4 (für die Anforderungszeile plus Headerfelder)
    • 6. : 16384 Bytes (für jedes Headerfeld)
  • Kater:
    • 5.5.x / 6.0.x : 49152 Bytes (für die Anforderungszeile plus Headerfelder )
    • 7.0.x : 8190 Bytes (für die Anforderungszeile plus Header-Felder)

Fazit: Um von allen oben genannten Webservern akzeptiert zu werden, sollten die Anforderungszeile und die Headerfelder einer Anforderung 8190 Bytes nicht überschreiten. Dies ist auch die Grenze für jedes Header-Feld (effektiv sogar weniger).

56
Gumbo

Für Apache habe ich diesen Server Limits for Apache Security Artikel gefunden, in dem die folgenden Anweisungen aufgelistet sind:

  # allow up to 100 headers in a request
  LimitRequestFields 100
  # each header may be up to 8190 bytes long
  LimitRequestFieldsize 8190

Für Nginx steuert die Anweisung large_client_header_buffers von HttpCoreModule Folgendes:

Die längste Headerzeile der Anfrage darf auch nicht größer als die Größe eines Puffers sein, sonst erhält der Client den Fehler "Bad request" (400).

Standardmäßig entspricht die Größe eines Puffers der Seitengröße, je nach Plattform sind dies 4 KB oder 8 KB

14
Kevin Hakanson

Während Sie den Server konfigurieren können, ist es unwahrscheinlich, dass Sie wirklich den gesamten Weg durch Firewalls, Load Balancer und Proxys konfigurieren können. Wenn Sie die Headergröße klein halten, werden Probleme vermieden.

4
Lothar

Der Flash Media Server 4.5 verfügt über ein sehr kurzes Standard-Header-Längenlimit, das dazu führen kann, dass der Server einfach nicht reagiert, insbesondere unter Umständen, in denen mäßig viele Cookies geladen werden.

Siehe: Konfiguration und Verwaltung von Flash Media Server 4.5: Konfigurieren des Servers Konfigurieren des Apache HTTP-Servers: Geben Sie die maximale Länge der HTTP-Headerzeile an.

In der Flash Media Server Adaptor.xml-Datei bestimmt das MaxHeaderLineLength -Element die Größe des HTTP-Headers, den der Server verarbeiten kann. Der Standardwert für MaxHeaderLineLength beträgt 1024 Byte. Einige Browser senden einen Header, der größer als 1024 Byte ist. In diesem Szenario sendet Apache eine leere Antwort zurück. Konfigurieren Sie MaxHeaderLineLength auf 8192, um dieses Problem zu beheben.

Hinweis: Standardmäßig beträgt die Größenbeschränkung für Apache-HTTP-Header 8 KB (8190 Byte plus Wagenrücklauf).

Stellen Sie dies hier ein, falls die Beschränkung der Headergröße auf Flash Media Server jemand anderen beißt.

3
artlung