即使设置了“Cache-Control: max-age”,浏览器是否继续发送资源请求?
Does browser continue to send requests for resource even with `Cache-Control: max-age`
我正在阅读一篇很棒的关于缓存的文章,里面有以下内容:
验证器非常重要;如果一个人不在场,而且没有任何可用的新鲜度信息(过期或缓存控制),缓存将不存储任何表示。
最常见的验证器是文档最后更改的时间,如Last-Modified头所述。当缓存有存储的包含Last-Modified标头的表示形式,它可以使用它询问服务器表示自上次以来是否发生了更改时间,与If-Modified-Since请求。
所以,我想知道浏览器是否继续为资源发送请求(例如HEAD),即使我指定了Cache-Control: max-age=3600
?如果没有,那么这个标题还有什么意义呢?是否在max-age
时间过去后使用?
Cache-Control: max-age=3600
标头意味着浏览器将缓存响应长达3600秒。在此时间过后,如果不首先确认它仍然是新鲜的,则可能不再提供响应。
为此,浏览器可以:
- 使用正常的
GET
请求获取全部资源(再次传输整个响应体) - 或者基于ETag (
If-None-Match
)或Last-Modified报头(If-Modified-Since
)执行重新验证,即客户端仅在实际更改时获取响应体。当然,这只有在验证器存在于原始响应中时才有可能。
简而言之:同时使用max-age
和缓存验证器的原因是首先缓存响应一段时间,然后执行节省带宽的重新验证以确认资源的新鲜度。
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 检查CSV标头是否匹配,如果匹配则继续分析,否则停止
- 是否可以间隔暂停视频,并请求验证码以继续播放
- 如何在继续函数之前检查元素长度是否已更改 - Javascript
- 是否可以防止引导轮播在鼠标悬停时暂停并继续自动循环
- 重定向后是否可以继续运行 JavaScript 代码
- 使用节点时是否有等效的语句“继续”.js 为每个系列异步
- 继续检查条件是否成立
- 是否可以编写一个跳过一个或多个字符并继续匹配的正则表达式?
- 是否有可能在某个点停止执行代码并请求确认,然后继续
- 即使设置了“Cache-Control: max-age”,浏览器是否继续发送资源请求?
- 函数在继续之前是否等待被调用的函数完成
- 结合两个函数来检查是否为真,然后继续
- SignalR集线器是否有明确的版本控制策略,以便旧的JS代码可以继续工作
- 在javascript中,是否有内置的错误代码?有可能捕获内部错误吗?可以继续
- 即使在用户通过javascript导航离开后,ASP.NET是否仍能继续可靠地处理请求
- 即使在关闭页面后,脚本是否仍会继续运行