缓存控制的无缓存和必须重新验证之间的区别?

2023-12-02

来自 RFC 2616

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

no-cache

如果 no-cache 指令未指定字段名称,则缓存 不得使用响应来满足后续请求,除非 与源服务器的重新验证成功。这允许一个原点 服务器以防止缓存,即使是已配置为的缓存 返回对客户端请求的过时响应。

因此它指示代理重新验证all回应。

将此与

必须重新验证

当收到的响应中存在必须重新验证指令时 通过缓存,该缓存不得在条目变得陈旧后使用该条目 响应后续请求而不首先重新验证它 源服务器

因此它指示代理重新验证stale回应。

特别是关于no-cache,这就是用户代理实际上根据经验对待该指令的方式吗?

有什么意义no-cache如果有must-revalidate and max-age?

看到这个评论:

http://palpapers.plynt.com/issues/2008Jul/cache-control-attributes/

no-cache

虽然这个指令听起来像是在指示浏览器不要 缓存页面,有一个微妙的区别。 “无缓存”指令, 根据 RFC,告诉浏览器应该重新验证 在从缓存中提供页面之前先调用服务器。重新验证是一个 巧妙的技术可以让应用程序节省带宽。如果 浏览器缓存的页面没有改变,服务器只是发出信号 到浏览器并且页面从缓存中显示。因此, 浏览器(至少在理论上)将页面存储在其缓存中,但是 仅在与服务器重新验证后才显示。在实践中,IE Firefox 已经开始将 no-cache 指令视为 指示浏览器甚至不要缓存该页面。我们开始观察 这种行为大约一年前。我们怀疑这一变化是 由于该指令的广泛(且不正确)使用, 防止缓存。

有人对此有更官方的消息吗?

Update

当且仅当未能验证表示上的请求可能导致不正确的操作(例如默默地未执行的金融交易)时,服务器才应使用必须重新验证指令。

这是我迄今为止从未放在心上的事情。 RFC 表示不要轻易使用必须重新验证。问题是,对于 Web 服务,您必须采取消极的态度,并为未知的客户端应用程序假设最坏的情况。任何陈旧的资源都有可能导致问题。

我刚刚考虑过的其他事情,如果没有 Last-Modified 或 ETags,浏览器只能再次获取整个资源。然而,对于 ETags,我观察到 Chrome 至少似乎对每个请求都进行了重新验证。这使得这两个指令毫无意义,或者至少命名不当,因为它们无法正确重新验证,除非请求还包含其他标头,然后无论如何都会导致“始终重新验证”。

我只是想让最后一点更清楚。只需设置must-revalidate但不包括 ETag 或 Last-Modified,代理只能再次获取内容,因为它没有任何内容可发送到服务器进行比较。

然而,我的经验测试表明,当响应中包含 ETag 或修改后的标头数据时,代理总是会重新验证,无论是否存在must-revalidate header.

所以重点是must-revalidate是在缓存过时时强制“绕过缓存”,这只有在您设置了生命周期/年龄时才会发生,因此如果must-revalidate设置在没有年龄或其他标头的响应上,它实际上相当于no-cache因为响应将被立即视为过时。

——所以我终于要标记吉利的答案了!


我相信must-revalidate means :

一旦缓存过期,拒绝向用户返回过时的响应 即使他们说陈旧的回应是可以接受的。

Whereas no-cache暗示 :

must-revalidate再加上响应立即变得陈旧的事实。

如果响应可缓存 10 秒,则must-revalidate10 秒后启动,而no-cache暗示must-revalidate0秒后。

至少,这是我的解释。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缓存控制的无缓存和必须重新验证之间的区别? 的相关文章

  • 在 asp.net mvc 3 中使用 Last-Modified 标头和 OutputCacheAttribute 进行客户端缓存

    Edited 我想在客户端缓存图像 并且知道在 mvc 3 中有不同的方法可以做到这一点 如果我错了 请纠正我 1 你可以使用OutputCacheAttribute其工作原理是Expireshttp 标头 但它会回来304 Not Mod
  • 集群环境下如何管理spring缓存

    我正在尝试使用 spring 为我的应用程序构建缓存服务 缓存需要从数据库填充 我的应用程序在三个节点上运行 并希望所有三个节点都与缓存同步 如果一个节点在缓存中获得更新的值 它应该通知其他节点 我在看Spring 缓存抽象 http do
  • Android 套接字和 HTTP 响应标头

    有趣的是 我可能无意中找到了解决方案是否可以使用普通套接字连接发送 HTTP 请求并接收没有标头的响应 https stackoverflow com questions 8320574 我希望我忽略了一些东西 无论如何 我正在连接到 We
  • ASP.NET MVC3 IIS7.5:Cache-Control maxage 始终为 0(不利于客户端缓存)

    我正在使用 Fiddler 测试我的网站 并注意到网络服务器总是返回 Cache Control private s maxage 0 用于动态内容 MVC 操作 这可以防止页面在客户端缓存 不知道是MVC还是IIS的问题 我该如何修复它
  • iOS 解决方案仅当图像尚未使用 SDWebImage 缓存在内存中时才加载带有动画的图像

    我已经为这个问题苦苦挣扎了几天 以前我使用 AFNetworking 类别来加载和缓存图像 但它的回调中没有提供缓存类型 所以我过去常常在每个控制器中跟踪哪些图像已经加载 我浏览了 SDWebImage 它提供了我正在寻找的东西 SDIma
  • 使用 RSpec 进行 Rails 片段缓存测试

    我觉得这是一个没有太多记录的主题 至少我在这里找到最佳实践时遇到了很多麻烦 我使用 cache key 在视图中进行片段缓存 tbody employees each do employee cache employee do tr emp
  • Yslow 替代方案 - 针对小型网站的优化

    我正在开发一个基于内部网的小型 Web 应用程序 我安装了 YSlow 它建议我做几件事 但它们似乎与我无关 例如 我不需要 CDN 我的应用程序很慢 所以我想减少请求的带宽 我应该遵守 YSlow 的哪些规则 是否有适用于小型网站的替代工
  • 帮助我了解实体框架 4 延迟加载的缓存

    我在实体框架 4 0 中遇到了一些意想不到的行为 我希望有人可以帮助我理解这一点 为了解决这个问题 我使用了 Northwind 数据库 我还使用默认的代码生成器 不是 poco 或自我跟踪 我希望每当我查询框架的上下文时 如果我尚未获取这
  • Web API 缓存 - 如何使用分布式缓存实现失效

    我有一个 API 目前不使用任何缓存 我确实有一个正在使用的中间件 它可以生成缓存标头 Cache Control Expires ETag Last Modified 使用https github com KevinDockx HttpC
  • Permissions-Policy 标头错误:无法识别的功能:“interest-cohort”

    我才刚刚开始反应 我的页面在本地主机上运行良好 现在我正尝试在 github 上托管我的页面 我使用了 npm run deploy 并托管 这是我的 package json 现在 当我尝试访问我的页面时 我遇到了错误 第一个警告最让我担
  • MVC 5 中的“缓存配置文件”

    我是 MVC 的初学者 我有一个项目要从 MVC2 转换到最新版本的 MVC 我读了一些关于MVC 4的书 所以我开始了解主要机制 但是 在转换我的 MVC 2 解决方案时 我遇到了一个属性问题 OutputCache 例如 我有多个这样的
  • Google Cloud CDN“强制缓存所有内容”不缓存所有内容

    我正在为我的 WordPress 网站使用 Google Cloud CDNhttps cdn datanumen com https cdn datanumen com 我已启用 强制缓存所有内容 选项 然而 网页 css文件 javas
  • 如何强制网络浏览器不缓存图像

    背景 我正在为两个公益网站编写并使用一个非常简单的基于 CGI Perl 的内容管理工具 它为网站管理员提供了事件的 HTML 表单 他们可以在其中填写字段 日期 地点 标题 描述 链接等 并保存 在该表格上 我允许管理员上传与该活动相关的
  • 您可以在 Safari 扩展中修改 http 请求标头吗?

    我可以在 FF 和 IE 中执行此操作 并且我知道 Chrome 中尚不存在 有人知道是否可以在 Safari 插件中执行此操作吗 我在文档中找不到任何这样或那样的说法 Safari 增加了扩展支持 但与 Chrome Firefox Ed
  • 阻止 Google Chrome 发送 Sec-Fetch 标头

    我想在我的 Web API 2 net framework 4 6 2 应用程序 中缓存静态内容 index html 我编写了 OWIN 中间件 添加了一个cache control响应的标头 允许从浏览器缓存中检索后续请求 OWIN 上
  • 如何使用 gzip 压缩 .net 对象实例

    我想在将数据库查询结果添加到缓存之前对其进行压缩 我希望能够压缩任何引用类型 我有一个用于压缩字符串的工作版本 这个想法基于 scott hanselman 的博客文章http shrinkster com 173t http shrink
  • 缓存静态 HTML 站点

    我通常使用 WordPress 但刚刚为客户完成了一个项目 该项目是一个静态 HTML 页面 由 8 个页面和每页约 2 个图像组成 使用 WordPress 我会使用 w3 总缓存 cloudflare photon 或通过 wp 引擎的
  • Nestjs如何控制缓存?

    最近读了nestjs的文档 从中学到了一些东西 但我发现了一些让我困惑的事情 In 技术 缓存 https docs nestjs com techniques caching 文档告诉我使用像这样的装饰器 UseInterceptors
  • JedisPoolConfig 不可分配给 GenericObjectPoolConfig

    我有一个基于 Spring 的 Java Web 应用程序托管在 Heroku 上 我正在尝试使用 Redis 实现来利用 Spring 缓存抽象 当服务器启动时 我收到一条错误消息 Type redis clients jedis Jed
  • Laravel 5 清除视图缓存

    我注意到 Laravel 缓存视图存储在 storage framework views 随着时间的推移 他们会吃掉我的空间 我该如何删除它们 有什么命令可以吗 我试过php artisan cache clear 但它并没有清除视图缓存

随机推荐