文档章节

Chrome总是自动缓存nginx返回的js文件的解决方案

Jason_hu
 Jason_hu
发布于 2017/08/04 16:10
字数 717
阅读 342
收藏 0

WEB的网页缓存分析

Chrome会自动本次缓存Nginx的本地资源

  • nginx在1.0之后的版本,当处理本地资源文件的时候,会自动追加Etag和Last-modified头部信息
  • Chrome在收到一个资源携带了Date和Last-Modified头部,同时,没有Expires头部,会自动决定过期策略,简单的规则有个例子,不确定正确性,但是Chrome就是会保持这个过期策略,下次请求的时候会直接from memory cache
    • 简单来说没有Cache-Control头部,Cache-Control 默认为private, max-age=Date header 的值减去Last-modified header 值的10%
  • 所以你的Chrome会自动缓存这些本地资源文件,包括js文件
  • 所以你发布的最新js文件,Chrome访问的时候不会自动刷新

解决方案

  • 你需要nginx在响应页面的时候,强制指定expire策略,而不是由chrome来自动决定过期策略
  • 一般来说,缓存策略设置的时间要较短,这样新发布的程序会更快的出现在终端浏览器中
  • 即使设置了缓存策略,原来的ETag和Last-Modified头部,还是会生效的,因此,即使很快过期,如果服务器的资源真的没有变化,服务器也会快速响应304,不会真的重新下载整个资源
    location ~* \.(html|js|css|gif|jpg|jpeg|png) {
      expires 300s;
    }

特别说明

  • nginx的Etag和Last-Modified会增强性能,不要关闭
  • 当资源设置了Expires策略,那么在过期时间内,Chrome不会发送任何请求到nginx,直接使用本地页面,该请求在Network中会看到from memory cache的标记
  • 当超过了本地过期策略,chrome会发送服务器请求,并携带该资源上次收到的ETag和Modified-Since,nginx一般在这个时候会返回304(如果资源没有修改),或者200(如果资源修改了)
  • 你输入在URL的地址,Chrome认为是直接请求,会忽略本地的任何缓存,直接发送请求给服务器(携带Etag和Modified-Since),而页面引用的资源,Chrome会认为是间接资源,而使用本地缓存策略。
  • 因此,有的时候你就会发现,如果你发布了新WEB程序,首页地址页面,会是最新的,但是引用的js和css,都是旧的,不会自动更新。就是上面说的原因造成的。
  • 当然,通过在首页html页面,修改连接的js和css的路径地址,譬如增加一个版本号后缀,也会强制要求浏览器请求新的资源。因为浏览器是以完整的URL来决定缓存id的,追加了版本后缀浏览器认为是一个新的URL地址。

© 著作权归作者所有

Jason_hu
粉丝 8
博文 20
码字总数 9638
作品 0
浦东
私信 提问
WebView深度学习(三)之WebView的内存泄漏、漏洞以及缓存机制原理和解决方案

上两篇文章讲到了WebView的基本使用以及Android和js的交互 以及 全面总结WebView遇到的坑及优化 ,这篇文章讲一下内存泄漏和漏洞处理。如果你想更深入的了解WebView,这篇文章值得一看。 ⇒ ...

aweiloveandroid
2018/01/10
0
0
Form在某些浏览器中自动向本页面提交并“刷新”

今天在码js时遇到一个神奇的Bug 就是这么一个简单的form提交,在Chrome上可以完美运行,表单提交成功后跳转到其他页面。但是在FireFox、Safari浏览器上总是会再次跳转到自己页面,而查看数据...

皇家马德里主教练齐达内
2018/04/28
0
0
【CKeditor】使用SpringMVC处理CKeditor上传图片

0、了解CKeditor的相关文件以及引入js 引入ckeditor的js 1、开启CKeditor上传图片功能 官方说明 简明的说,就是只需要在创建CKeditor时,添加以下两个配置: 在用CKEDITOR.replace()中配置 ...

666B
2014/07/28
0
4
js修改后出现加载乱码的情况!在线求解!!!!

好久不写前端了, 今天碰到一个奇怪的问题请看截图: 这是Html加载js文件 这是js内容: 打开页面 , 浏览器正常弹出alert 然后修改一次js 刷新浏览器后并没有弹出alert,报错信息如下: JS内容...

卡卡东
2016/06/05
617
8
从1000多个项目中得到10个JavaScript错误以及如何避开它们

  我们将查看浏览器在JavaScript开发过程中所犯的最常见的错误,以及web开发人员可以如何避免这些错误。   为了回馈我们的开发者社区,我们查看了数千个项目的数据库,发现了JavaScript的...

爱码农
2018/02/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql mysql中的索引

一、索引的分类 普通索引 唯一性索引 unique约束设置唯一索引,主键是一种特殊的唯一索引。 全文索引 查询较大数据量时,使用全文索引可以提高查询速度。 单列索引 包括以上三个索引 多列索引...

edison_kwok
8分钟前
0
0
Springboot 集成redis

这里只做单机版简单集成,不过为项目中使用 1.在pom文件中引入支持 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redi......

贾峰uk
13分钟前
1
0
Qt编写安防视频监控系统4-删除视频

一、前言 一般会有两种处理方式来删除视频,一种是鼠标右键菜单,删除当前视频或者删除所有视频,一种是直接按住当前视频,移到视频通道界面以外就表示删除当前视频,这也是个比较人性化的设...

飞扬青云
17分钟前
0
0
NCRE考试感想 三级信息安全(下)

时代的变迁 一些学科的兴起,一些学科的没落;一些职业的兴起,一些职业的没落。在2016年,新闻报道中说:国务院取消了百余项职业资格证书。一切都处于变动之中,要找到变化的规律,跟上时代...

志成就
19分钟前
0
0
MySQL索引原理及慢查询优化,了解一下?

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。 虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课...

骚年锦时
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部