解决网站部署后,需要浏览器刷新才能加载新版资源的问题

现象

公司的项目使用webpack打包,会自动在生成的资源文件名中加入hash,防止浏览器缓存。
但是有一个现象一直很令人费解:项目部署后,再次打开浏览器=>输入url=>回车, 会发现加载的仍然是旧版网页,只有按F5刷新后才会正常加载。

原因

经过观测浏览器network,发现该问题产生的问题如下:
当浏览器向服务器发起对index.html的请求时,服务器的返回头中没有对缓存进行设置,于是在浏览器的下一次非刷新请求时,就会自动在本地缓存中拿到之前缓存好的index.html,而且index.html中引用的资源文件也都是已经在浏览器中缓存好的,所以此时浏览的就一定是旧版网站。

解决

设置Nginx配置文件中的location项即可,使其返回index.html时,自动添加不要缓存的响应头,这样每次浏览器就都会去服务器拿最新的index.html了。
这里偷懒了,只匹配了html(返回资源路径中存在“html”就会带相应的缓存响应头),正确一点的做法其实是“html$”,匹配html结尾的资源。

  location / {
    index index.html;
    if ($uri ~* "html") {
        add_header Cache-Control "no-cache, no-store, max-age=0, must-revalidate";
    }
  }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,056评论 3 119
  • 中秋之夜赏风光,圆月画萌妆。穿行云海忽现,暗淡不见东江。 思故旧,念家乡,是迷茫。醉弹琴瑟,欲诉衷情,音乐凄凉。 ...
    爱琴岛阅读 2,669评论 1 9
  • 从最初看到这句话,我不过无比正确的生活。我又一种被点燃的感觉。冲动与热血,莫名的被吸引,觉得一定要了解一下,一...
    丁小丁DIY阅读 3,372评论 1 1
  • 简评:作者按照时间轴,为大家分解一下,前天 Facebook 全球开发者大会(F8)第一天,到底说了什么?剧透,核...
    极小光阅读 4,476评论 1 14
  • 熬夜追完韩剧《我亲爱的朋友们》,这是大概10年里面看的第一部韩剧。剧讲的不是那些美女和小清新的故事。相反,故事讲述...
    WEI_曹蕾阅读 4,123评论 2 2

友情链接更多精彩内容