Cache-Control的缓存策略同时配置no-store和no-cache是什么意思?

Cache-Control: no-store, no-cache, max-age=0, must-revalidate, proxy-revalidate

上面是mdn的一个例子,为什么no-store和no-cache同时出现,那不相当于no-store吗?

阅读 2.1k
avatarAI BotBETA

Cache-Control: no-store, no-cache意味着浏览器和其他中间缓存设备不能使用缓存策略,每次都需要从服务器上获取内容。

no-store指示浏览器或其他中间缓存设备不能存储任何资源。这意味着即使在多次请求同一资源的情况下,浏览器也必须始终从服务器获取资源,而不是使用之前缓存的版本。

no-cache告诉浏览器和其他中间缓存设备在向服务器发送请求之前不要先检查缓存。如果缓存的内容已经过期,它仍然会使用过期的资源,除非同时设置了max-age=0,这告诉浏览器不要使用任何缓存,即使它在本地有缓存的资源也要始终从服务器获取。

因此,当同时设置no-storeno-cache时,浏览器和其他中间缓存设备不能使用任何形式的缓存策略。他们必须始终从服务器获取内容。这与只设置no-store的效果是一样的。

请注意,这并不意味着你不能设置多个指令。例如,如果你想禁止浏览器和中间缓存设备存储任何资源,但仍然允许它们使用已经过期的资源(只要这些资源没有过期),你可以设置Cache-Control: no-store, max-age=0。在这种情况下,浏览器和其他中间缓存设备将始终从服务器获取内容,但它们可以使用已经过期的资源,只要这些资源没有过期。

1 个回答

● 使用 no-cache 指令的目的是为了防止从缓存中返回过期的资源。“no-cache” 指令告诉浏览器和代理服务器不要缓存响应数据。这意味着缓存会将响应数据存储在缓存中,但在将响应返回给客户端之前,必须先将该响应提交给服务器进行验证。服务器会检查响应的有效性,如果发现响应仍然有效,服务器会返回一个新的验证令牌(ETag),以通知缓存可以使用它,否则服务器将返回新的响应数据。这种方式被称为“验证缓存”。

no-store
● “no-store” 指令更为严格,它要求浏览器和代理服务器不要在任何情况下缓存响应数据。这意味着每次请求都需要从原始服务器重新获取数据,不进行任何缓存。这可以用于敏感数据或者响应数据频繁更改的情况,以确保不会在客户端或代理服务器上存储敏感信息或者过期的数据

同时配置了no-cache和no-store,no-store的优先级要高,我没看具体是什么场景下什么例子,但是同时出现肯定是没问题的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题