nginx设置不缓存静态入口资源

问题描述

每当我们发布版本之后万恶的index.html的缓存老是需要手动清除一下,才能加载新的js文件(虽然我们使用了hash后缀打包js文件,但是html文件入口是固定的)。每次客户出现了问题,都只能在群里说下清一下缓存试试呢。这样也不是个事儿呀...

技术背景

  • 使用nginx做代理
  • 使用webpack等打包出一个唯一的入口文件index.html,或者其他方式的入口html文件
  • 入口html文件中js已经使用hash后缀方式加载

实验步骤

在使用缓存策略前

如上图所示,我访问系统时第一个资源文件就是我的入口地址(为什么不是index.html?这是使用了vue-router的history模式,nginx配置返回静态文件index.html,其实都一样),大家看一下它的状态是200,其他css,js文件都是200(http常用状态码后面会补充)。 当我刷新一下浏览器之后,如下

第一个websocket的咱们先不管,看第二个入口文件它的状态变成了304,而其他css,js文件是200 from memory cache,表示缓存过了。此时如果不强制清除缓存就会出现前面描述的情况一样,即使我下面的css,js文件都有hash后缀但是因为入口文件被缓存了,那么它还是会加载老的js文件,当然如果此css或js文件不存在可能会404错误。 上面两图分别是两种缓存状态。

状态码 说明 个人理解 备注
200 OK 请求成功 正常请求
304 Not Modified 设置了长缓存、但ETag没有移除时触发 协商缓存
200 from memory cache 不请求网络资源,资源在本地内存当中 chrome策略,firefox都是304

结合以上表格可以看出,不管是304还是200 from memory cache都会有存在入口文件被缓存的风险。所以修改nginx配置如下:

location ~ .*\.(htm|html)?$ {#原来这样设置的不管用#expires -1;#现在改为,增加缓存add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";access_log on;
}
复制代码

在使用缓存策略后

不管刷新多少次,都是200正常状态,没有被缓存,但是检测到css,js文件还是原来的所以也不用担心他们会重新加载一遍。 我们再做个线上版本发布的测试,我重新发布项目后,所有文件后缀全部变了,如下图 轻轻刷新一下浏览器,会发现入口html文件状态还是正常的200,而其他js,css文件已经被重新加载了最新版本的,此时再刷新一下浏览器,便会和上面的上面那张图一样的状态。

到此,此问题解决,欢迎补充。

转载于:https://juejin.im/post/5c739f71f265da2de165a7fc

彻底解决让用户清一下浏览器缓存相关推荐

  1. 解决vue项目在ie浏览器缓存问题。

    解决vue项目在ie浏览器缓存问题. 参考文章: (1)解决vue项目在ie浏览器缓存问题. (2)https://www.cnblogs.com/jiangweichao/p/11255451.ht ...

  2. 完美解决 - 前端发版后浏览器缓存问题(发版后及时拉取最新版本代码)

    一.简介 开发完发布新版本后,在有些电脑上总需要强刷才能获取到最新版本的内容,太恶心了. 浏览器缓存(Browser Caching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档 ...

  3. 浏览器缓存导致的问题:

    1.需要的效果如下: 2.添加样式之后,样式会生效,但是没有达到上面的效果,表单会消失掉,只剩下一个黑色的背景图 4.原因: 因为浏览器的缓存问题导致的样式没有显示出来 5.解决办法: 清除掉浏览器缓 ...

  4. 解决web项目发布新版本需要清除浏览器缓存的问题

    原链接:https://www.jianshu.com/p/4ad18acb59d7 一.bug起因 最近做公司的项目,对样式进行了修改后,新版本上线.测试那边经常说:修改的样式没有生效,我都是让他们 ...

  5. 浏览器缓存带来的前端项目更新问题及解决方法

    先说一个前端开发中会遇到的问题,我们更新已上线的项目,用户的浏览器显示的却是旧版的页面,没有及时获取到我们更新的资源,这是什么原因造成的?此时,如果用户刷新一下页面,就得到更新后的资源,又是为什么? ...

  6. 【浏览器】浏览器缓存

    一 浏览器缓存机制 浏览器在每次发生请求时,先在在浏览器缓存中查找该请求的结果和缓存标识,并且每次收到请求结果均会把请求结果和缓存标识保存在浏览器缓存中. 总体脑图:文中脑图及流程图资源 浏览器缓存策 ...

  7. 详解浏览器缓存 前端开发必会

    详解浏览器缓存 缓存可以说是性能优化中简单高效的一种优化方式了.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷. 对于一个数据请求来 ...

  8. html js清除缓存,js清除浏览器缓存的几种方法

    JS 缓存的问题一直都是我们又爱又恨的东西.也是我们比较头痛的问题, 一方面为了提高网站响应速度,减少服务器的负担,和节省带宽,将需要将静态资源缓存在客户端, 但是另一方面,当js 文件有改动的时候, ...

  9. chrome浏览器缓存 from disk cache

    今天遇到个问题,同样的两个前端项目,服务器也一样,但是有一个项目的接口出现status:200 (from disk cache),之前从没遇见过,在此记录一下.解决办法:只要清除浏览器缓存(更多工具 ...

最新文章

  1. 怎么在html中加判断,css样式里面如何做判断
  2. 2020-11-23(Windows系统的dll注入 )
  3. nodejs链接kafka示例(producer、consumer)
  4. 在Java中使用内存映射文件时检测(写入)失败
  5. zookeeper 学习笔记1(转)
  6. iis php.exe,在IIS75下使用php运行exe程序的总结
  7. 上传txt生成字典 java_文件上传漏洞fuzz字典生成脚本小工具分享
  8. pylint警告: An attribute defined in json.encoder line 158 hides this methodpylint(method-hidden)
  9. qq视频转码失败怎么办_迅捷视频转换器腾讯视频转换失败如何解决?
  10. linux中dd命令增加内存使用率,Linux 下使用 dd 命令进行硬盘 I/O 性能检测
  11. Linux 重新加载 nginx 配置命令
  12. 经济法期末模拟试卷及答案
  13. Excel表格成绩排名全攻略,让你事半功倍!
  14. 关于使用AccountManager的remove删除Android帐号的细节
  15. 和数荣获由国家授权的30项计算机软件著作权及1项发明专利
  16. KDB+ database
  17. 小蒋家庭影音平台 怎么用
  18. Java简单的GUI考试系统
  19. ISME | 热液微生物群落揭示了喷口区的生物地理学和嗜热性的进化历史
  20. 什么是游戏开发的实体系统框架

热门文章

  1. 大卫·鲍伊(David Bowie)在AR中:Planeta如何通过Unity打造杀手级应用
  2. SQL Server中出现用户或角色在当前数据库已经存在的问题的解决
  3. Python批量OCR日语文字图片并输出内容至文本文档~(调用百度OCRapi)
  4. electron的基本教程
  5. 2023年中国人民大学信息资源管理学院信息分析考研上岸前辈经验
  6. 安卓手机自带的显示基站命令
  7. 计算机学院东北大学奖学金2016,2018年命名奖学金基本评选要求汇总表-东北大学软件学院.PDF...
  8. uniapp [微信小程序开发工具]?Enable IDE Service (y/N) ESC[27DESC[27C
  9. 【车载开发系列】UDS诊断---常见的ISO标准集合
  10. 基于JavaSwing开发简单的画图板程序 课程设计 大作业源码