2010-07-13 17 views
36

Soweit ich weiß, ist es durch die HTTP-Spezifikation erlaubt, mehr als einen HTTP-Header mit dem gleichen Namen zu setzen. Gibt es einen Anwendungsfall (von Client zu Server und umgekehrt)?Mehrere HTTP-Header mit demselben Namen festlegen?

HTTP 1.1 Section 4.2:

Mehrere Nachrichten-Header-Felder mit die gleichen Feldnamen in eine Nachricht vorhanden sein können, wenn und nur wenn der gesamte Feld Wert für dieses Header-Feld als definiert ist Komma-getrennte Liste [dh # (Werte)]. Es muss möglich sein die mehrere Header-Felder zu einem kombinieren „Feldname: Feldwert“ Paar, ohne die Semantik der Nachricht zu ändern, indem jedes nachfolgenden Feldwert auf den ersten Anfügen jeweils getrennt durch ein Komma. Die Reihenfolge , in der Header-Felder mit den gleichen Feldnamen erhalten werden, ist daher Bedeutung für die Interpretation von der kombinierte Feldwert und damit ein Proxy muss nicht die Reihenfolge der diese Feldwerte ändern, wenn eine Nachricht ist weitergeleitet.

Wenn ich falsch liege, gibt es keinen Fall, wo mehrere Header mit dem gleichen Namen benötigt werden.

+3

"Wenn ich falsch liege, gibt es keinen Fall, wo mehrere Header mit dem gleichen Namen benötigt werden." - Sie sind richtig, und es ist nicht etwas, was ich darauf abstützen würde, richtig unterstützt zu werden, abhängig davon, welche Technologien zwischen Ihnen und den rohen Kopfzeilen sitzen. – heisenberg

+5

Das einzige Mal, dass ich die doppelten Header gesehen habe, ist 'Set-Cookie:'. – TRiG

+0

Verwandte Frage: [Sind doppelte HTTP-Antwortheader akzeptabel?] (Http://stackoverflow.com/questions/4371328/are-duplicate-http-response-headers-acceptable). WebDAV-Header sind [ein weiteres Beispiel] (https://github.com/joyent/node/issues/2750) von Header-Namen-Duplikaten. – chrisjleu

Antwort

17

Da doppelte Header Probleme mit verschiedenen Webservern und APIs verursachen können (unabhängig davon, was die Spezifikation sagt), bezweifle ich, dass es einen allgemeinen Anwendungsfall gibt, wo dies die beste Vorgehensweise ist. Das heißt natürlich nicht, dass irgendjemand es nicht tut.

+0

Nachrichtenformat und APIs haben unterschiedliche Anforderungen ... –

+0

Inhaltssicherheitsrichtlinie soll mehrere Header verarbeiten. Siehe https://twitter.com/mikewest/status/841892857736765443, wo dies ein Problem verursacht. – oreoshake

4

Es ist nur für Header mit einem sehr spezifischen Format zulässig, siehe RFC 2616, Section 4.2.

+0

Er sagte ziemlich klar in der Frage, dass er es erlaubt, das ist nicht, was er fragt. – heisenberg

+6

Dieser Link ist jedoch sehr hilfreich. Insbesondere der Teil, dessen Header mehr als einmal vorkommen, muss auch als einzelner Header mit kommagetrennten Werten dargestellt werden können. – nategood

30

Es wird häufig für Set-Cookie: verwendet. Viele Server setzen mehr als einen Cookie.

Natürlich können Sie sie immer alle in einem einzigen Header setzen.

Eigentlich glaube ich, dass Sie nicht mehrere Cookies in einem Header festlegen können. Das ist also ein notwendiger Anwendungsfall.

Die Cookie spec tut behaupten, dass Sie mehrere Cookies in einem Header die gleiche Art und Weise andere Header kombiniert werden können (durch Kommas getrennt), aber es weist auch darauf hin, dass nicht-konforme Syntax (wie der Expires Parameter kombinieren, die hat , s in seinem Wert) sind immer noch üblich und müssen von Implementierungen behandelt werden.

Also, wenn Sie Expires Parameter in Ihrem Set-Cookie Header verwenden und Sie nicht möchten, dass alle Ihre Cookies zur gleichen Zeit ablaufen, müssen Sie wahrscheinlich mehrere Header verwenden.

+0

Sie können sie einfach in einem Header setzen: Set-Cookie: Hallo = Welt; Konzeption = geprüft – BronzeByte

+3

Ah, aber können Sie Cookies mit unterschiedlichen Ablaufzeiten im selben Header setzen? Sag mal, kannst du das in einen Header umwandeln? Set-Cookie: Name1 = Wert1; Ablauf = Mi, 22 Feb 2012 17:45:00 GMT Set-Cookie: name2 = value2; Expires = Wed, 09 Jun 2021 10:18:14 GMT – sligocki

+0

Das würde einen Cookie im Browser namens Expires speichern und von der Sekunde überschrieben werden ..., ich habe in der Zwischenzeit ein serverseitiges Session-Backend aufgebaut, 100% sicheres, super einfaches und sicheres Speichern von Java-Objekten möglich – BronzeByte

0

Alter Thread, aber ich habe in der gleichen Frage gesucht. Wie auch immer, die Accept und Accept-Encoding Header sind typische Beispiele, die mehrere Werte verwenden, durch Komma getrennt. Selbst wenn es sich um einen anforderungsspezifischen Header handelt, unterscheiden die Spezifikationen nicht zwischen Anforderung und Antwort auf dieser Ebene. Überprüfen Sie die von dieser Seite. Was die Spezifikation sagt ist, dass, wenn Sie Kommas als Zeichen im Wert der Kopfzeile haben, Sie nicht mehrere Kopfzeilen mit demselben Namen verwenden können, sofern Sie nicht die Verwendung des Kommas disambiguate.

1

Da Sie nach Anwendungsfällen suchen, wäre vielleicht Accept ein gültiger.

  • Accept: application/json
  • Accept: application/xml
-1

In meiner bescheidenen Meinung nach, nur die Kopfzeilen, deren Wert getrennt mit Komma ausgedrückt (definiert) werden, können in geschrieben werden mehrere Header mit einem einzelnen oder mehreren Werten.

Nehmen wir an, wir haben einen Header, dessen Wert in eine durch Komma getrennte Liste geschrieben werden kann.

Entries-In-Order: Jane,John,Charlie 

Der Header-Wert ist gültig von seiner Definition und dem Server oder der Client weiß, es. Und dann können wir es als

Entries-In-Order: Jane,John 
Entries-In-Order: Charlie 

trennen Aber irgendwelche Überschriften verstehen nicht das Komma getrennte Wert kann nicht in mehreren geschrieben werden.

Who-Are-Responsible: John, Jane or maybe Charlie? 

Wenn per definitionem der Server oder der Client kann die gesamte Zeichenfolge (John,Jane,maybe Charlie?) als einziger Wert handhaben, es als mehrere Header Schreiben wird nicht wie erwartet funktionieren.

My-Dummy-Header: John 
My-Dummy-header: Jane or maybe Charlie? 
+2

Das ist nicht deine Meinung, das sind Informationen, die schon in der Frage sind. – hobbs

Verwandte Themen