对于 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的缓存指令通常是这样的:
