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
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
- Andreas Baer (14.04.2009 10:30)
- Johannes Hafner (14.04.2009 12:43)
- Josephine Hunter (15.04.2009 08:02)
- Johannes Hafner (15.04.2009 10:55)
- Josephine Hunter (16.04.2009 06:58)
- Arno Welzel (16.04.2009 15:55)
- Johannes Hafner (16.04.2009 22:25)
