- From: Willy Tarreau <w@1wt.eu>
- Date: Mon, 18 Nov 2013 05:52:03 +0100
- To: Martin Thomson <martin.thomson@gmail.com>
- Cc: HTTP Working Group <ietf-http-wg@w3.org>
Hi Martin,
On Sun, Nov 17, 2013 at 04:44:19PM -0800, Martin Thomson wrote:
> On 16 November 2013 00:02, Willy Tarreau <w@1wt.eu> wrote:
> > Indeed, right now applications correctly handle cookie as a list
> > of values which can be aggregated using commas like any other header
> > field.
>
> All the discussions thus far, plus a reasonably careful reading of RFC
> 6265 leads me to conclude that this is not the case. In particular,
> http://tools.ietf.org/html/rfc6265#section-5.4 is quite clear:
>
> When the user agent generates an HTTP request, the user agent MUST
> NOT attach more than one Cookie header field.
Indeed, I'm noticing this change in this version. Both 2109 and 2965 used
to define it this way using ';' or ',' as delimiters :
cookie = "Cookie:" cookie-version 1*((";" | ",") cookie-value)
I have no idea why Adam proposed this change in a way incompatible with
what was done for 15 years. Also I know a number of places where reverse
proxies add Cookie headers before passing the request to the server
(generally with user information or geoloc info). It's been said for a
while that only the Set-Cookie header could not be folded (because of the
date containing a comma) while the Cookie header can.
> Given the grammar, which doesn't use the list construction or a comma,
> merging with commas would seem to be invalid.
It used to be before 6265 at least.
> I'd be interested in learning if multiple headers appeared ever in the wild.
Well, I don't know if browsers do this, I doubt it. I know at least one
component at a customer's which splits cookies over multiple lines to
avoid emitting more than 8kB per line. I would not be surprized if we
could find a few other ones.
That said, as soon as you propose to split the Cookie header values into
multiple header fields and to re-aggregate them afterwards, you're doing
exactly that.
If we want to be able to split values following semi-colons in HTTP/2
(usually they're just "attributes" of a value), we should probably invent
a specific encoding for this. Or instead, we should go further and define
how cookies should be converted to some HTTP/2-specific state management
and conversely.
Best regards,
Willy
Received on Monday, 18 November 2013 04:52:27 UTC