must-revalidate cache-control header 是否告诉浏览器仅下载已更改的缓存文件?
Does the must-revalidate cache-control header tell the browser to only download a cached file if it has changed?
如果我希望浏览器从缓存中加载 PDF 文件直到它们在服务器上发生更改,我是否必须使用 max-age=0
和 must-revalidate
作为 cache-control headers ?
如果我为 max-age
使用另一个值(大于 0)是否意味着只有在超过 max-age 值时才会重新生效?
如果我只设置 must-revalidate
header 而不设置 max-age 会怎样?
我正在通读 this question 但我不是 100% 确定。
另外,revalidate 到底是什么意思?是不是客户端询问服务器文件是否有变化?
相反,我读到 cache-control no-cache 几乎可以实现我想要实现的目标。缓存并检查服务器是否有新版本...那么正确的方法是什么?
我假设您问的是应该配置哪些 header 从您的服务器发送,"client" 您的意思是 "modern web browser"?那么引用的question/answer是正确的,所以:
- 是的,您应该同时设置两者,但是
max-age=0
就足够了,(must-revalidate
是默认行为)
- 是的,正确,响应将从本地缓存提供,直到 max-age 过期,之后将重新验证(一次),然后再次从本地缓存提供,依此类推
- 它有点不确定,并且在浏览器和您发送请求的方式之间有所不同(从 [=46= 单击 link,点击重新加载按钮,直接在地址栏中输入并点击回车)。通常,不应直接从缓存中提供响应,但可以重新验证或从服务器请求完整响应。
- Revalidate 表示客户端仅在内容自上次检索后发生更改时才要求服务器发送内容。为了使其工作,作为对初始请求的响应,服务器将发送以下一项或两项:
Etag
header(其中包含内容的哈希值),客户端将在重新验证请求中缓存并发回 If-None-Match
header,因此服务器可以将客户端缓存的 Etag 值与服务器端的当前 Etag 值进行比较。如果值没有改变,服务器将响应304 Not Modified
(和空body),如果值改变,服务器将响应200
和完整(新)内容
Last-Modified
(其中包含最后一次内容修改的时间戳),客户端将在If-Modified-Since
header中的重新验证请求中发送该时间戳,将在服务器端用于确定响应(304
或 200
)
Cache-control: no-cache
在大多数(简单)情况下可能会达到相同的效果。事情变得复杂的情况是intermediate caches between client and the server, or when you want to tweak client behavior (for example when sending AJAX requests) and that is when most of the caching directives开始使用
如果我希望浏览器从缓存中加载 PDF 文件直到它们在服务器上发生更改,我是否必须使用 max-age=0
和 must-revalidate
作为 cache-control headers ?
如果我为 max-age
使用另一个值(大于 0)是否意味着只有在超过 max-age 值时才会重新生效?
如果我只设置 must-revalidate
header 而不设置 max-age 会怎样?
我正在通读 this question 但我不是 100% 确定。
另外,revalidate 到底是什么意思?是不是客户端询问服务器文件是否有变化?
相反,我读到 cache-control no-cache 几乎可以实现我想要实现的目标。缓存并检查服务器是否有新版本...那么正确的方法是什么?
我假设您问的是应该配置哪些 header 从您的服务器发送,"client" 您的意思是 "modern web browser"?那么引用的question/answer是正确的,所以:
- 是的,您应该同时设置两者,但是
max-age=0
就足够了,(must-revalidate
是默认行为) - 是的,正确,响应将从本地缓存提供,直到 max-age 过期,之后将重新验证(一次),然后再次从本地缓存提供,依此类推
- 它有点不确定,并且在浏览器和您发送请求的方式之间有所不同(从 [=46= 单击 link,点击重新加载按钮,直接在地址栏中输入并点击回车)。通常,不应直接从缓存中提供响应,但可以重新验证或从服务器请求完整响应。
- Revalidate 表示客户端仅在内容自上次检索后发生更改时才要求服务器发送内容。为了使其工作,作为对初始请求的响应,服务器将发送以下一项或两项:
Etag
header(其中包含内容的哈希值),客户端将在重新验证请求中缓存并发回If-None-Match
header,因此服务器可以将客户端缓存的 Etag 值与服务器端的当前 Etag 值进行比较。如果值没有改变,服务器将响应304 Not Modified
(和空body),如果值改变,服务器将响应200
和完整(新)内容Last-Modified
(其中包含最后一次内容修改的时间戳),客户端将在If-Modified-Since
header中的重新验证请求中发送该时间戳,将在服务器端用于确定响应(304
或200
)
Cache-control: no-cache
在大多数(简单)情况下可能会达到相同的效果。事情变得复杂的情况是intermediate caches between client and the server, or when you want to tweak client behavior (for example when sending AJAX requests) and that is when most of the caching directives开始使用