业务系统的一个测试环境出现一台电脑的浏览器访问网页始终展示异常,控制台没有报错,另外的电脑访问是正常的。强制刷新可以解决问题。
业务系统的缓存策略是:页面加载时时更新,静态资源文件名加了hash采用一年有效期强缓存。
经过排查页面加载是正常的,但是其中有css只加载了一部分资源就被缓存起来了。这让我想起之前遇到过js资源加载一部分,但是响应状态码还是200。于是详细研究了一下这个问题,现整理如下
Nginx配置了缓存静态资源
用户浏览器请求静态资源,如果Nginx缓存中有且有效则直接获取,这样子可以减轻服务器压力
Nginx所在磁盘满了
用户浏览器第一次访问业务,页面请求最终到服务端正确返回,再请求静态资源时,Nginx转发请求时,会把返回的静态资源缓存,由于磁盘满了,导致只缓存了一部分资源。其他用户再请求静态资源,直接从缓存取资源,返回了不完整的资源,但是返回状态码还是200。浏览器认为资源正确加载,会对资源进行一年的强缓存。这个用户用当前浏览器就会一直有问题,即使Nginx所在磁盘清理数据,解决了Nginx侧的问题
本次是测试环境遇到这个问题,如果是线上环境,除了要排查Nginx的问题,还需要再发一次版本,让静态资源生成新的hash,用户加载新的资源来解决问题
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。