Loc*_*Loc 3 http cache-control browser-cache
我有一个简单的问题。我用谷歌搜索但没有找到答案。
我有一个页面。我想禁用页面内容的缓存。
是的。我可以添加缓存控制指令,例如
Cache-Control: no-cache, no-store, must-revalidate, max-age: 0
Run Code Online (Sandbox Code Playgroud)
但问题是:如果没有与返回的缓存相关的 HTTP 标头,例如 Cache-Control、Expires、Pragma、Last-Modified,...在这种情况下浏览器/代理是否会缓存响应?如果是,什么时候?
谢谢你!
可以通过各种指令阻止符合 RFC 的客户端缓存页面。然而,就浏览器的历史而言,一切都会发生。
\n如果没有适合缓存验证的标头,则中介和客户端都不应该认为响应是可缓存的:
\n\n\n缓存不得存储对任何请求的响应,除非 [\xe2\x80\xa6] 响应:
\n\n
漏洞可能是那些带有状态代码的响应,根据RFC 7231 第 6.1 节,默认情况下被认为是可缓存的:
\n\n\n默认情况下定义为可缓存的状态代码(例如,本规范中的 200、203、204、206、300、301、404、405、410、414 和 501)的响应可以由具有启发式过期的缓存重用除非方法定义或显式缓存控制另有指示
\n
RFC 7234 的链接部分故意含糊不清。我的理解是,缓存将根据它们可以找到的其他标头来插入合理的过期时间。这很可能允许过期时间基于Set-Cookie标头的参数。回到第 3 节,结束语强调了这一点,指出
\n\n[\xe2\x80\xa6] 在正常操作中,某些缓存不会存储既没有缓存验证器也没有显式过期时间的响应,因为此类响应通常无法存储。然而,并不禁止缓存存储此类响应。
\n
然而,浏览器可以随意提供其历史记录之外的页面。从第 6 节开始:
\n\n\n新鲜度模型不一定适用于历史机制。也就是说,历史机制可以显示以前的表示,即使它已经过期。
\n
总之,中介机构拥有很大的自由度来缓存响应,而无需明显的缓存控制指令。始终提供请求方法(例如GET,HEAD)和响应代码(见上文)首先是可缓存的。浏览器的缓存应该像任何普通中介一样运行(在某种程度上,确实如此),但在历史机制的上下文中,可以自由地故意忽略所有缓存机制(存在或不存在)并加载页面直接从它的记忆中。
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |