Gibt es eine praktische Längenbeschränkung für HTTP-Header?

71

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

Gibt es eine praktische Größenbeschränkung für den Header-Wert? Wenn mein JSON abgeschnitten wird, kann es nicht mehr analysiert werden. Ich beschäftige mich am meisten mit Beschränkungen in Apache 2, Tomcat 6 und IIS 7. Ich habe eine Google-Suche nach einer Beschränkung der Länge von http-Headern durchgeführt , aber viele der Ergebnisse scheinen veraltet zu sein. Es gibt einige relevante Kommentare in Wie groß kann eine Benutzeragentenzeichenfolge werden? aber nicht so spezifisch wie ich möchte.

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

Kevin Hakanson
quelle
Interessanter Ansatz. Welche Metadaten senden Sie so?
Marcus Downing
Beachten Sie auch, dass dies Probleme verursachen kann, wenn ein Benutzer eine Verbindung über einen Proxyserver herstellt
carpii

Antworten:

51

Ja, aber die Grenzwerte sind konfigurierbar und plattformabhängig. Beispielsweise hat Tomcat ein Standardlimit von 8 KB. Ich glaube, dass IIS 6, das sich bei IIS 7 nicht sicher ist, ein Limit von 16 KB hat. Ich bin darauf gestoßen, als ich die integrierte Windows-Authentifizierung für mehrere Websites verwendet habe. Es stellte sich heraus, dass mein Sicherheitstoken zu groß war, als es in den Header codiert wurde. Zum Glück sind diese konfigurierbar. Die Registrierungseinstellungen für IIS finden Sie unter http://support.microsoft.com/kb/820129 . Ich glaube, die wichtigsten Einstellungen, die geändert werden müssen, sind MaxFieldLength (pro Header-Größe) und MaxRequestBytes (Gesamtgröße der Anforderung).

Tvanfosson
quelle
1
Ich habe diesen Link auf MSDN gefunden, um IIS-Header-Limits für einen bestimmten Header festzulegen
Kevin Hakanson
Laut dem KB-Artikel funktionieren diese Registrierungsfelder für IIS6 und IIS7
Cheeso
2
Während Sie den Server konfigurieren können, ist es unwahrscheinlich, dass Sie den gesamten Weg über Firewalls, Load Balancer und Proxys konfigurieren können. Wenn Sie die Größe des Headers klein halten, bleiben Probleme vermieden.
Lothar
58

Obwohl jede Webserver-Software einige Einschränkungen aufweist, gibt es einen Unterschied, ob es ein Limit für die HTTP-Anforderungszeile plus Headerfelder oder für jedes Headerfeld gibt.

Hier ist eine Zusammenfassung:

  • Apache 1.3 , 2.0 , 2.2 , 2.3 : 8190 Bytes (für jedes Headerfeld)
  • IIS:
    • 4.0 : 2097152 Bytes (für die Anforderungszeile plus Headerfelder)
    • 5.0 : 131072 Bytes , 16384 Bytes mit Windows 2000 Service Pack 4 (für die Anforderungszeile plus Headerfelder)
    • 6.0 : 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 Headerfelder)

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

Gumbo
quelle
15

Für Apache habe ich diesen Artikel zu Serverlimits für Apache-Sicherheit gefunden, in dem die folgenden Anweisungen aufgeführt 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 Kopfzeile der Anforderung darf auch nicht größer als die Größe eines Puffers sein, da sonst der Client den Fehler "Bad request" (400) erhält.

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

Kevin Hakanson
quelle
4

Während Sie den Server konfigurieren können, ist es unwahrscheinlich, dass Sie den gesamten Weg über Firewalls, Load Balancer und Proxys konfigurieren können. Wenn Sie die Größe des Headers klein halten, bleiben Probleme vermieden.

Lothar
quelle
3

Der Flash Media Server 4.5 hat eine sehr kurze Standard-Header-Längenbeschränkung, die dazu führen kann, dass der Server einfach nicht reagiert, insbesondere unter Umständen, in denen eine moderate Cookie-Last vorliegt.

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

In der Datei Flash Media Server Adaptor.xml MaxHeaderLineLength bestimmt das Element die Größe des HTTP-Headers, den der Server verarbeiten kann. Der Standardwert für MaxHeaderLineLengthist 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 MaxHeaderLineLength8192, um dieses Problem zu beheben .

Hinweis: Standardmäßig beträgt die maximale Größe des Apache-HTTP-Headers 8 KB (8190 Byte plus Wagenrücklauf).

Wenn Sie dies hier einfügen, falls die Beschränkung der Headergröße auf Flash Media Server jemand anderen beißt.

artlung
quelle