背景:公司的A系统使用iframe嵌入了B系统的页面,因为跨域问题,所以我们使用了A所在的apache服务器反向代理了B系统的所在的weblogic服务器,从而使得A系统和B系统处在同一个域。
问题:B系统每次上线,重新部署到weblogic服务器之后,部分用户在A系统通过iframe打开B系统都会iframe加载不出来,但是清理浏览器缓存之后就可以正常打开了。
其它:
- 因为用户只反馈了这个BUG的现象,并没有给出前后端报错日志,所以导致很难排查。
- 我自己测试了一下发现导致iframe页面空白的情况有两种,一种是渲染iframe之前,前端代码报错;第二种是iframe请求了错误的html(比如原来的html被删除了或者路径更改了),这两种情况会引发渲染iframe的页面空白。
- 我猜测是不是服务器缓存出了什么问题,之前有同事说是浏览器缓存有问题,我个人觉得不太可能是浏览器缓存的问题,因为浏览器是将静态资源缓存到磁盘,如果服务器静态资源发生变更,而浏览器仍然请求浏览器缓存的话,造成的结果不是页面空白而是看不到新功能(比如原本的背景色是红色,新版本你改成了绿色,如果请求浏览器缓存那么仍然是红色)。
看描述信息应该是浏览器缓存的关系。
因为你的A系统并没有更新迭代。所以可以认为
iframe
中打开的仍然是旧的url
地址。但有可能B系统已经迭代过了导致对应的index.html
中的资源文件hash
值已经变更。所以本地磁盘中的缓存(也就是缓存的B系统
index.html
中的资源链接对应的资源都会404)。也就解释了你为啥清理浏览器缓存之后就可以正常打开了。解决方式就是在Nginx代理转发的时候设置不缓存的头信息。或者在A系统使用
iframe
嵌入B系统的地方给src
增加时间戳。让iframe
以为每次请求的都是新地址来解决缓存的问题。