首页 > 解决方案 > no-cache 是否允许返回过时的缓存响应?

问题描述

我正在阅读关于no-cacheand的相互矛盾的陈述must-revalidate

这个答案说:

使用 must-revalidate,如果服务器没有响应重新验证请求,浏览器/代理应该返回 504 错误。没有缓存,它只会显示缓存的内容

但是,“仅显示缓存的内容”而不进行重新验证与https://datatracker.ietf.org/doc/html/rfc7234#section-5.2.1.4中的内容相矛盾:

“no-cache”请求指令指示缓存不得使用存储的响应来满足请求,而无需在源服务器上成功验证。

如果确实no-cache不允许在没有重新验证的情况下使用缓存的响应,那么有什么意义must-revalidate呢?

标签: httpcachingbrowser-cachecache-controlno-cache

解决方案


缓存可能会提供陈旧的响应

“陈旧”响应是具有明确到期信息或允许计算启发式到期但根据第 4.2 节中的计算不是新鲜的响应。

除非:

如果明确的协议内指令禁止缓存(例如,“no-store”或“no-cache”缓存指令、“must-revalidate”缓存响应指令、或适用的“s-maxage”或“proxy-revalidate”缓存响应指令;参见第 5.2.2 节)。

请特别注意,在此要求中no-storeno-cache高速缓存指令,并且must-revalidate是高速缓存响应指令。

因此,must-revalidate对于源服务器来说,它表明当响应变得陈旧时可能不会被重用,而不是客户端表明他们不会接受陈旧响应的方式。


推荐阅读