- From: Rory Hewitt <rory.hewitt@gmail.com>
- Date: Tue, 17 Jun 2025 14:55:36 -0700
- To: Yoav Weiss <yoav.weiss@shopify.com>
- Cc: Chris Fredrickson <cfredric@google.com>, ietf-http-wg@w3.org
- Message-ID: <CAEmMwDxTp6KmAiNNciRNQZGogP=SZENje0c4freVTNVK1pSZ7Q@mail.gmail.com>
OK, so a double-underscore to start, followed by a prefix (followed optionally by 1+ underscore+prefix 'pairs') followed by a dash followed by a user-defined string? Yeah, it would work, and it's certainly not awful, but I was hoping it would be doable *without* those extra underscores. In my opinion, "__UnpartitionedSecureHttp-myname" is significantly 'nicer' than "__Unpartitioned_Secure_Http-myname", even aside from being shorter. But others may disagree, obviously. I guess I assumed the user-agent parsing could be as simple as this: if (cookiename.substr(0,1) == "__") { prefixes == cookiename.substr(2); dowhile (prefixes.substr(0,0) != "-") { if (prefixes.substr(0,5) == "Secure") { ...do Secure stuff... prefixes == name.substr(6); } elseif (prefixes.substr(0,3) == "Host") { ...do Host stuff... prefixes == name.substr(4); } elseif (prefixes.substr(0,3) == "Http") { ...do Http stuff... prefixes == name.substr(4); } elseif (prefixes.substr(0,10) == "Partitioned") { ...do Partitioned stuff... prefixes == name.substr(11); } else { ...unrecognized - find first dash and set prefixes to point to that... } } } ...do more stuff... (obviously I don't write code any more, and the above has all sorts of edge-cases, but in theory, adding a new prefix just means adding a new clause to the above dowhile loop. If a value is unrecognized, it's just ignored) I recognize it's probably not that simple, but it *could* be, no? Rory On Tue, Jun 17, 2025 at 2:05 PM Yoav Weiss <yoav.weiss@shopify.com> wrote: > > > On Tue, Jun 17, 2025 at 7:06 PM Rory Hewitt <rory.hewitt@gmail.com> wrote: > >> > A potentially simpler/shorter option could be: >> __Host__HttpOnly-mycookie (where __HttpOnly__Host would work similarly, and >> we could also compound future prefixes as well, e.g. >> __Unpartitioned__HttpOnly). >> >> I raised this as a concern in a prior email several months ago: >> >> "I'm not sure how the various __Secure-* and __Host-* cookies would play >> with __HttpOnly-* cookies proposed by Yoav. Would this end up with cookie >> names like "__HttpOnly__Secure-string"?" >> >> I like Chris's idea of having a generic "__Prefixed{strings}" format, but >> surely the actual double-underscore is itself the prefix? do we need more >> than that? >> >> IOW, can't we simply define it as: >> >> __{unordered-case-sensitive-prefixes}-{string} >> >> where {unordered-case-sensitive-prefixes} is one or more of the following *in >> any order*: >> >> *Secure* >> *Host* >> *Http* (I prefer this to "HttpOnly', simply because for some >> reason we've gone for case-sensitive cookie names, and if we're talking >> CamelCase prefixes, then that can confuse things) >> *Unpartitioned* (Chris's 'dummy' name) >> ...more to come... >> >> So all of these would be equivalent: >> >> __SecureHttpUnpartioned-myname >> __HttpSecureUnpartioned-myname >> __UnpartitionedSecureHttp-myname >> > > While I like the terseness and the smaller name, this would be harder to > parse correctly and efficiently. > It could also be an issue when it comes to forward compat, where > user-agents will not be able to ignore restrictions they don't yet support. > > Maybe introducing a single chat delimiter isn't awful? > > e.g. `__Host_Unpartitioned-name` > > >> This would require some tinkering to ensure that the current rules that >> apply to e.g. "__Secure-" and "__Host-" cookies can ensure that e.g. a >> cookie named "__HostSecureUnpartitioned-myname" can't be created with a >> Path prefix other than /, since that would clash with the existing "__Host" >> cookie definitions. And, of course, the existing double-underscore cookie >> naming would have to be ported in a backwards-compatible manner. >> >> The nice thing is that just using a double-underscore with 1+ unordered >> prefixes is simple and keeps the name of the cookie as small as possible. >> >> Rory >> >> On Mon, Jun 16, 2025 at 9:44 PM Yoav Weiss <yoav.weiss@shopify.com> >> wrote: >> >>> Thanks! >>> >>> On Mon, Jun 16, 2025 at 11:19 PM Chris Fredrickson <cfredric@google.com> >>> wrote: >>> >>>> This comment is orthogonal to this proposal (by which I mean, I don't >>>> intend to block the proposal on solving this), but I noticed that this >>>> proposal wants, in principle, to convey a single boolean signal in the >>>> cookie name (i.e. whether the cookie was marked HttpOnly or not). But due >>>> to the fact that prefixes don't compose well, Yoav was forced to create two >>>> new prefixes instead of one (and it would have been worse if the new >>>> prefixes didn't happen to require the Secure attribute). >>>> >>>> I think this shows the current prefix-based approach is hard to extend, >>>> and if we wanted to add another prefix (e.g. __Unpartitioned-, just off the >>>> top of my head), we'd actually have to add a handful of variants, due to >>>> the combinatorial explosion. >>>> >>>> I think this is solvable if we design a prefix system that's >>>> order-insensitive. My gut instinct is to want something like: >>>> __Prefixed(Host,HttpOnly,Unpartitioned)-mycookie >>>> >>> >>>> Some of those characters are forbidden in cookie names (which are >>>> tokens: https://datatracker.ietf.org/doc/html/rfc9110#name-tokens), >>>> though, so we could do something like this instead: >>>> __Prefixed!Host&HttpOnly&Unpartitioned!-mycookie >>>> >>> >>> A potentially simpler/shorter option could be: __Host__HttpOnly-mycookie >>> (where __HttpOnly__Host would work similarly, and we could also compound >>> future prefixes as well, e.g. __Unpartitioned__HttpOnly). >>> >>> >>>> I realize there's going to be a lot of details to work out on this >>>> regarding backward compatibility, forward compatibility, security, >>>> particulars about the spelling, etc. But it might be nice to make the >>>> system more extensible now, rather than the next time someone tries to >>>> extend it. >>>> >>>> Curious if anyone else has thoughts! >>>> >>> >> >> -- >> Rory Hewitt >> >> https://www.linkedin.com/in/roryhewitt >> > -- Rory Hewitt https://www.linkedin.com/in/roryhewitt
Received on Tuesday, 17 June 2025 21:55:53 UTC