Subject: John Scudder's No Objection on draft-ietf-httpbis-targeted-cache-control-03: (with COMMENT)

From: John Scudder via Datatracker <[email-masked]>
Date: Fri, 14 Jan 2022 10:38:06 -0800

John Scudder has entered the following ballot position for
draft-ietf-httpbis-targeted-cache-control-03: No Objection

When responding, please keep the subject line intact and reply to all
email addresses included in the To and CC lines. (Feel free to cut this
introductory paragraph, however.)

Please refer to https://www.ietf.org/blog/handling-iesg-ballot-positions/
for more information about how to handle DISCUSS and COMMENT positions.

The document, along with other ballot positions, can be found here:
https://datatracker.ietf.org/doc/draft-ietf-httpbis-targeted-cache-control/

----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Thanks for this clear and useful document; also for the helpful shepherd
writeup. I have a nit, and a question:

1. §2.1 Nit:

   Implementations SHOULD NOT consume values that violate these inferred
   constraints.  For example, a consuming implementation were to coerce
   a max-age with a decimal value into an integer would behave
   differently than other implementations, potentially causing
   interoperability issues.

I think “were to coerce” should be “that were to coerce”.

2. I have a question regarding one of the examples in §3.1:

   Whereas these would prevent all caches except for CDN caches from
   storing the response:

   Cache-Control: no-store
   CDN-Cache-Control: none

   (note that 'none' is not a registered cache directive; it is here to
   avoid sending a header field with an empty value, which would be
   ignored)

As a httpbis naïf, I might have guessed that a field that contains no
registered directive might be considered equivalent to an empty field, in which
case according to the rules of §2.2 the field would be ignored and the
Cache-Control field would be respected instead.

Your example makes it clear that guess would be wrong, thank you. My question
is whether it’s completely obvious to those conversant with the subject area,
that it’s fine to just bung a random string into the field? For that matter,
supposing someone came along and registered 'none' at some point in the future.
Might that cause the example case to break?

---

From: Mark Nottingham <[email-masked]>
Date: Sat, 15 Jan 2022 13:42:34 +1100

Thanks, John.

> On 15 Jan 2022, at 5:38 am, John Scudder via Datatracker <[email-masked]> wrote:
> 
> 1. §2.1 Nit:
> 

I took a slightly different route:
  https://github.com/httpwg/http-extensions/commit/203f88e7880

> Cache-Control field would be respected instead.

CDN-Cache-Control is a structured field, so an empty value isn't valid and might be discarded by implementations. Even for "normal" HTTP fields, there's anecdotal evidence that empty fields are sometimes removed.

> Might that cause the example case to break?

This is really just for purposes of clarifying the semantics -- I don't think anyone would reasonably do this. But yes, it's clear in HTTP that unrecognised strings are ignored.

Regarding the example breaking -- I suppose we could use 'example', but honestly I don't think it's very likely that 'none' will be registered.

Cheers,

--
Mark Nottingham   https://www.mnot.net/