禁用缓存仍然在请求中发送 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-Match
,no-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
的缓存版本,它可以重新验证。还是不行。
我认为您遗漏的一点是该指令针对中间缓存,以控制它们的行为。
为什么在开发者工具中选中“禁用缓存”会导致在请求中发送 Cache-Control: no-cache
?
no-cache
表示与服务器核对缓存副本是否与服务器上的相同,如果是,则使用那个,如果不是,则获取新版本。
但是,如果缓存被禁用,那么无论如何客户端都必须从服务器请求一个新版本。
那么为什么要发送 no-cache
?
此外,如果不发送 If-None-Match
,no-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 sendingIf-None-Match
? Otherwise the server has no way of knowing what version of the file is in your cache.
浏览器没有发出条件请求(虽然它可以),所以它不使用 If-None-Match
。但是,中间缓存可以有一个带有 ETag
的缓存版本,它可以重新验证。还是不行。
我认为您遗漏的一点是该指令针对中间缓存,以控制它们的行为。