HTML页面 <meta> 中设置了不缓存,后端返回头中设置了缓存时间页面会缓存吗?

对于 HTML 页面而言,如果页面的 <meta> 设置了不缓存(no-cache, no-store, Expires = 0)。
但是 Nginx 配置了 HTML 页面的缓存时间,那么实际用户在浏览的时候是以什么为准呢?

阅读 5.1k
3 个回答

理论上应该是 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)。

头像
dollor
    2.6k149
    广西百色市凌云县

    Nginx配置的配置为准。
    Nginx配置后,会把缓存的指令填充在HTTP报头里,浏览器会根据HTTP的报头决定缓存时间。
    至于HTML里的meta标签的缓存设置,这些一般是给搜索引擎用,浏览器其实是不认的。

    HTTP的缓存指令通常是这样的:

    HTTP缓存报头

    印象里面,http <meta> 价值不大,且无法影响到网络中间的缓存,所以可以不管。基本上生效的还是 response header。

    撰写回答
    你尚未登录,登录后可以
    • 和开发者交流问题的细节
    • 关注并接收问题和回答的更新提醒
    • 参与内容的编辑和改进,让解决方法与时俱进
    推荐问题
    宣传栏