禁用缓存仍然在请求中发送 Cache-Control: no-cache

Disabling cache still sends Cache-Control: no-cache in the request

为什么在开发者工具中选中“禁用缓存”会导致在请求中发送 Cache-Control: no-cache

no-cache表示与服务器核对缓存副本是否与服务器上的相同,如果是,则使用那个,如果不是,则获取新版本。

但是,如果缓存被禁用,那么无论如何客户端都必须从服务器请求一个新版本。

那么为什么要发送 no-cache

此外,如果不发送 If-None-Matchno-cache 是不是毫无意义?否则服务器无法知道缓存中文件的版本。

我想没有缓存版本所以它不能在 If-None-Match 中发送 ETag,这让我回到最初的问题,为什么 no-cache 在全部.

清除缓存后,取消勾选“禁用缓存”复选框,刷新页面,可以看到没有发送Cache-Control header:

no-cache means check with the server to see if the cached copy is the same as what's on the server, if it is, use that, if not, then get the new version.

no-cache means:“缓存不得使用存储的响应来满足未在源服务器上成功验证的请求。”它不需要条件请求,常规 GET 也满足该定义。

So why does it bother sending no-cache?

防止中间缓存返回未经验证的缓存版本。

Also, isn't no-cache pointless without also sending If-None-Match? Otherwise the server has no way of knowing what version of the file is in your cache.

浏览器没有发出条件请求(虽然它可以),所以它不使用 If-None-Match。但是,中间缓存可以有一个带有 ETag 的缓存版本,它可以重新验证。还是不行。

我认为您遗漏的一点是该指令针对中间缓存,以控制它们的行为。