目录
1. bug现场情况
现场两套系统,集成同一个单点登录。其中一个系统跳转到另外一个系统时浏览器会刷新两次。
奇怪的是打开F12,问题就不能复现。
2. 尝试破案
打开控制台问题就解决了?真是奇怪!可能是控制台打开后,静态文件在浏览器端不再缓存造成的。
打开F12禁止控制台Network --> Disable cache
设置,果然问题能够复现,前端js
的请求确实是缓存的。
初步判断两次刷新原因:前端js
缓存,发送异步权限数据请求接口时没有权限(第一次请求刷新),然后重定向单点登录服务获取service ticket
,重新登录后,再次请求权限数据接口(第二次请求刷新),页面成功展示。
笔者对浏览器的行为不熟,这里只是猜测。
笔者系统单点登录实现的
CAS
接口,所以应用session
过期或者失效后需要从新从单点服务处获取service ticket
票据。
浏览器刷新两次fiddler
抓包如图:
第一次异步请求后,由于没有权限,302
重定向访问单点登录服务。这里控制台会提示跨域请求,跨域在跨域详解部分详细介绍。
前端明确说了,不是前端的问题,解决不了。
笔者公司的前端就是硬气。
在后台处理,后台是springboot
项目,增加配置:
spring:
resources:
cache:
cachecontrol:
max-age: 0
复制代码
前端文件不会缓存,问题解决。
禁用缓存后,不会出现地址栏刷新两次现象,fiddler
抓包如图:
问题解决了,笔者对那个跨域的报错产生了兴趣。之前也看过不少跨域的文章,始终对跨域云里雾里。春节找出收藏的跨域文章,好好研读了一下,有所获,赶紧借此文分享出来。
3. 跨域详解
做web
开发,工作中肯定接触过如下浏览器控制台报错:
No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
请求的跨域资源response