对于 HTML 页面而言,如果页面的 <meta> 设置了不缓存( no-cache , no-store , Expires = 0 )。 但是 Nginx 配置了 HTML 页面的缓存时间,那么实际用户在浏览的时候是以什么为准呢?
理论上应该是 Response Headers 的优先级更高,因为一般会通过网关来控制缓存,HTML 经后端生成后,会经过网关返回回去,网关就可以在这个阶段设置缓存。 看 MDN 的 meta 描述关于 http-equiv 的介绍 属性定义了一个编译指示指令。这个属性叫做 http-equiv(alent) 是因为所有允许的值都是特定 HTTP 头部的名称 既然如此的话,浏览器就没必要再去阅读 HTML 文档来确定缓存了。 可以看一下这个文章: Caching Tutorial for Web Authors and Webmasters Meta tags are easy to use, but aren’t very effective. That’s because they’re only honored by a few browser caches, not proxy caches (which almost never read the HTML in the document). 译: meta 标签很容易使用,但并不十分有效。这是因为它们只被少数浏览器的缓存所尊重,而不是代理缓存(几乎从不读取文档中的HTML)。
以 Nginx 配置的配置为准。 Nginx 配置后,会把缓存的指令填充在 HTTP 报头里,浏览器会根据 HTTP 的报头决定缓存时间。 至于 HTML 里的 meta 标签的缓存设置,这些一般是给搜索引擎用,浏览器其实是不认的。 HTTP的缓存指令通常是这样的: