gpt4 book ai didi

apache - must-revalidate cache-control header 是否告诉浏览器仅在缓存文件发生更改时才下载它?

转载 作者:可可西里 更新时间:2023-11-01 17:16:24 26 4
gpt4 key购买 nike

如果我希望浏览器从缓存中加载 PDF 文件直到它们在服务器上发生更改,我是否必须使用 max-age=0must-revalidate 作为缓存-控制标题?

如果我为 max-age 使用另一个值(大于 0),是否意味着只有超过 max-age 值才会重新生效?

如果我只设置 must-revalidate header 而不设置 max-age 会怎样?

我正在通读 this question我不是 100% 确定。

另外,revalidate 到底是什么意思?是不是客户端向服务器询问文件是否有变化?

相反,我读到缓存控制无缓存几乎可以实现我想要实现的目标。缓存并检查服务器是否有新版本...那么正确的方法是什么?

最佳答案

我假设您是在询问应该配置哪些 header 从您的服务器发送,而“客户端”是指“现代网络浏览器”吗?那么引用的问题/答案是正确的,所以:

  1. 是的,您应该同时设置两者,但是 max-age=0 就足够了,(must-revalidate 是默认行为)
  2. 是的,正确,响应将从本地缓存提供,直到 max-age 到期,之后将重新验证(一次),然后再次从本地缓存提供,依此类推
  3. 它有点不确定,并且在浏览器和您发送请求的方式之间有所不同(单击来自 html 的链接,点击重新加载按钮,直接在地址栏中输入并点击回车)。通常,不应直接从缓存中提供响应,但可以重新验证或从服务器请求完整响应。
  4. Revalidate 意味着客户端仅在内容自上次检索后发生更改时才要求服务器发送内容。为了使其工作,作为对初始请求的响应,服务器将发送以下一项或两项:
    • Etag header (包含内容的哈希值),客户端将缓存该 header 并在重新验证请求中作为 If-None-Match header 发回,因此服务器可以将客户端缓存的 Etag 值与服务器端的当前 Etag 值进行比较。如果值未更改,服务器将响应 304 Not Modified(和空主体),如果值更改,服务器将响应 200 和完整(新)内容
    • Last-Modified(其中包含最后一次内容修改的时间戳),客户端将在 If-Modified-Since header 中的重新验证请求中发送它,这将是在服务器端用于确定响应(304200)

Cache-control: no-cache 在大多数(简单)情况下可能会达到相同的效果。事情变得复杂的情况是有 intermediate caches在客户端和服务器之间,或者当你想要 tweak client行为(例如发送 AJAX 请求时),这就是大多数 caching directives 的时候投入使用

关于apache - must-revalidate cache-control header 是否告诉浏览器仅在缓存文件发生更改时才下载它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58267693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com