On May 4, 2011, at 6:21 PM, Mark Nottingham wrote:
> AFAICT the only reason that you'd way to say that the Cache-Control header's presence means that you can ignore Pragma is if you want to emit requests like this:
>
> GET /foo HTTP/1.1
> Host: example.com
> Cache-Control: max-age=45
> Pragma: no-cache
>
> and have them treated differently by caches that understand CC vs. those that don't.
Yes, that's exactly what we need to do if there are suspected
HTTP/1.0 intermediaries in the path. max-age must override Pragma.
> As I've said a few times now, according to the spec, that's currently very clearly equivalent to:
>
> GET /foo HTTP/1.1
> Host: example.com
> Cache-Control: max-age=45, no-cache
>
> Which I *hope* we can agree should be interpreted conservatively.
No, that's not what the client wants. The client wants an HTTP/1.1
compliant cache to obey max-age=45, not no-cache, but fears the
presence of non-compliant caches that only understand Pragma.
Hence, both headers are sent. If the client wanted no-cache
semantics, it would have sent no-cache in *both* fields.
Pragma has the same relation to CC as Expires. If that isn't defined
in 2616, then it is surely an error in 2616.
....Roy