如果页面以标题
回答Cache-Control:private, s-maxage=0
页面是否应该被浏览器缓存?在这种情况下,规范行为是什么?
rfc2616定义了s-maxage:
如果响应包含s-maxage指令,则对于共享缓存(但不包括私有缓存),此指令指定的最大年龄将覆盖max-age指令或Expires头指定的最大年龄。 s-maxage指令还暗示了proxy-revalidate指令的语义(请参阅第14.9.4节),即共享缓存在变为陈旧以响应后续请求之后不得使用该条目,而不首先使用该条目重新验证它。原始服务器。私有缓存总是忽略s-maxage指令。
这让我有点困惑。我知道如果定义了max-age和s-maxage,s-maxage用于共享缓存,但私有(浏览器)缓存会发生什么? s-maxage是否仍由私有缓存使用?
我的测试表明Chrome 49和Firefox 44不会缓存此页面请求,而IE 11会有效地对此页面进行浏览器缓存(在win7 64位上进行测试)。此页面请求通过 AJAX 完成,以防万一。
所以你可以看到不同的浏览器有不同的行为。阅读规范似乎IE在这里是错误的。造成这种情况的根本原因是什么?也许是不同的默认值?
修改:进一步测试表明我的标题与Cache-Control:private
的工作方式相同。
在这种情况下,Chrome从不使用浏览器缓存来支持普通'页面请求和AJAX GET请求,而IE 11没有缓存正常的页面请求但缓存AJAX GET请求,没有明显的理由。
答案 0 :(得分:0)
页面是否应该被浏览器缓存?
如您所知,浏览器应忽略s-maxage
。来自the spec:
“s-maxage”响应指令表示共享缓存中的 , 此指令指定的最大年龄将覆盖最大年龄 由max-age指令或Expires头指定 字段。
同样,浏览器会忽略Cache-Control: private
:
“private”响应指令表示响应消息 适用于单个用户,不得由共享存储 高速缓存强>
具有私有缓存的浏览器应该忽略这两个指令;它们只适用于共享缓存。
因此,浏览器基本上忽略了标题;它应该启发式地缓存,就像没有Cache-Control
标题的响应一样。