http - no-cache 是否允许返回过时的缓存响应?
问题描述
我正在阅读关于no-cache
and的相互矛盾的陈述must-revalidate
。
这个答案说:
使用 must-revalidate,如果服务器没有响应重新验证请求,浏览器/代理应该返回 504 错误。没有缓存,它只会显示缓存的内容
但是,“仅显示缓存的内容”而不进行重新验证与https://datatracker.ietf.org/doc/html/rfc7234#section-5.2.1.4中的内容相矛盾:
“no-cache”请求指令指示缓存不得使用存储的响应来满足请求,而无需在源服务器上成功验证。
如果确实no-cache
不允许在没有重新验证的情况下使用缓存的响应,那么有什么意义must-revalidate
呢?
解决方案
缓存可能会提供陈旧的响应:
“陈旧”响应是具有明确到期信息或允许计算启发式到期但根据第 4.2 节中的计算不是新鲜的响应。
除非:
如果明确的协议内指令禁止缓存(例如,“no-store”或“no-cache”缓存指令、“must-revalidate”缓存响应指令、或适用的“s-maxage”或“proxy-revalidate”缓存响应指令;参见第 5.2.2 节)。
请特别注意,在此要求中no-store
和no-cache
是高速缓存指令,并且must-revalidate
是高速缓存响应指令。
因此,must-revalidate
对于源服务器来说,它表明当响应变得陈旧时可能不会被重用,而不是客户端表明他们不会接受陈旧响应的方式。
推荐阅读
- r - 有没有更优雅的方式在 R 中使用 mapvalues?
- python - 如何将 scipy.savgol_filter 应用于熊猫系列?
- amazon-web-services - 要使用 KMS 加密的 Secrets Manager 密钥的 SCP
- html - 使用嵌套表调整 Bootstrap 表中的列的大小和对齐方式
- python - 如何使用 Python 读取多个文件并将每个文件的标识符组合成单个数据框?
- latex - 是否可以在乳胶(背页)中插入 gif?
- swift - AudioKit 在外部 MIDI 键盘上播放音符
- ruby - 如何处理来自外部文件的 Sinatra 错误?
- python - 解析 XML 并转换为 CSV python
- julia - 情节.vline!在新的 Plots 版本中无法识别函数