nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Mehrfach auftretende HTTP-Header zusammenfassen vs. Cookie-Header

Von: Johannes Hafner (johannes.hafner@gmx.de) [Profil]
Datum: 14.04.2009 01:56
Message-ID: <gs0jeh$der$1@news.motzarella.org>
Followup-to: de.comm.protocols.misc
Newsgroup: de.comp.lang.php.misc de.comm.infosystems.www.authoring.misc de.comm.protocols.misc
Tag zusammen,

ich bin während meiner Arbeit an einer objektorientierten PHP Klasse zum
Umgang mit HTTP-Anfragen (und Antworten) auf ein Problem gestoÃen. Es
geht dabei um HTTP-Header, die mehrfach auftreten können.

Nach RFC 2616 (Abschnitt 4.2 Message Headers) dürfen Message-Header
genau dann mehrfach auftreten, wenn ihre Werte als comma-seperated list
definiert sind und es somit möglcih ist, alle gleichartigen Header zu
einem zusammenzufassen, indem man ihre Werte durch Kommata getrennt
aneinanderfügt.
Zitat:
> Multiple message-header fields with the same field-name MAY be
> present in a message if and only if the entire field-value for that
> header field is defined as a comma-separated list [i.e., #(values)].
> It MUST be possible to combine the multiple header fields into one
> âfield-name: field-valueâ pair, without changing the semantics of
the
>  message, by appending each subsequent field-value to the first, each
>  separated by a comma.

Mein Problem jetzt ist der Set-Cookie Header. Cookies werden leider
durch zwei Papers dokumentiert: das erste von Netscape (das ich leider
nirgends mehr finden konnte) und den RFC 2109. Lezterer ist komplett
konform mit dem RFC 2616. Die Empfehlungen von Netscape aber leider
nicht. Dort ist vorgesehen, die Gültigkeit eiens Cookies durch die
"expires"-Eigenschaft des Cookies festzulegen. Diese enthält als
Wert
ein Datum, das dem in RFC 2616 im Abschnitt 3.3.1 Full Date
spezifiziertem Schema entspricht. Dieses Format enthält leider ein Komma
nach dem Wochentag.
Dieses Komma führt nun dazu, dass jedes Cookie einen eigenen Header
benötigt, da das in RFC 2109 vorgesehene Schema mehrerer durch Kommata
getrennter Cookies (Zitat: Informally, the Set-Cookie response header
comprises the token Set-Cookie:, followed by a comma-separated list of
one or more cookies) nun nicht mehr möglcih ist. Folglich ist der Wert
nicht mehr als eine comma-seperated list dargestellt, also dürfte der
Header eigentlcih in HTTP/1.1 nicht mehr mehrfach vorkommen.

Nun zum eigentlichen Problem: ich speichere (und das möchte ich gerne
beibehalten) alle Header in einem Array als Namens-Werte-Paare. Dabei
ist der Name des Headers der Schlüssel. Ich muss also (da
Schlüssel ja
eindeutig sein müssen) mehrfach auftretende Header zusammenfassen (was
ja regelkonform ist), es sei denn ich vernwede mehrdimensionale Arrays
(was ich nciht möchte).
Momentan wandle ich alle expires-Eigenschaften in Cookies in das im RFC
2109 vorgesehene "max-age"-Feld um. Das enthält kein Komma, also
kann
ich mehrere Cookies durch Kommata getrennt aneinanderhängen (und wieder
sauber trennen indem ich bei jedem Komma splitte). Das ist aber nicht
die sauberste Lösung, da ich so a) die Antwort des Server
verändere
(wenn acuh nur syntaktisch und nicht semantisch) und b) relativ viel
aufwand betreibe um das Feld umzuwandeln (Datum parsen, timestamp
zurückgeben, aktuellen timestamp davon subtrahieren, Suchen und Ersetzen
im Header-String).

Gibt es da keine andere Regel- (= RFC-)konforme Möglichkeit?

Gruà und Danke,
Johannes

[ Auf dieses Posting antworten ]

Antworten