都是 Edge(IE) 缓存惹的祸

上周某天上班的时候,突然后端同志私戳我,

当时我正研究着另一个项目的PSD,内心认真规划着整个项目的代码结构,指尖流淌出迷人的键盘音……
好吧,其实内心想着中午吃什么菜,喝什么汤
仔细一看,第一反应是,怎么可能。于是爸爸我连忙打开虚拟机中滴 Win10,等待 Win10 爷爷慢悠悠的进入待机状态。迅速点开 Edge 。
打开网页和 network 控制台,迅速进入调试状态。
一点退出登录,“啪”一个退出请求出现在 network 里,账号也随之退出。这…不是很正常嘛??? 哦,是第二次,于是爸爸再次登录,点击退出。嗯?点击退出。嗯?点击退出。嗯???
为什么页面只是刷新了一下而没有退出???
看看 network ,空空如也。
同样的操作在 Chrome 下,正常

当时我的反应是——我可能打开的是假 Edge

根据之前的表现(就是点完页面刷新了一下),我一开始假设 Edge 下 a 标签 href 里写 javascript:; 不起作用,还是会跳转,于是绑定的事件也没用了。但是一看代码,好像不对。来,看代码:

1
2
3
4
5
$('.J_exit').on('click', function () {
$.get('/ajax/exit.do, function () {
location.reload();
});
});

点击退出按钮的时候请求退出接口,后端会删除对应的 session,然后前端刷新下也没,cookie 没有对应的 session 于是会跳到登录页,从逻辑上来说,没毛病。
所以排除我刚刚的假设,那会不会是缓存问题呢?刚想到这里……
就看到两个人气势汹汹的往我这来,是后端GG和测试MM,两人过来把我团团围住,“Hey,boy,Edge 的 Bug 改的怎么样了?”
我当时的表情是这样的, 这好像才过去三分钟,你两怎么就过来了??? 爸爸才刚打开虚拟机!
咦,不对,重点是,为啥你两亲自跑过来了? 宝宝很惶恐啊,有事私戳我就行了,没必要兴师动众的。由于我还没验证出 bug 原因,都是猜测,于是保守的说还母鸡呀。然后说了一堆有的没的,就走了,走了,了 哦,后台GG走之前意味深长的跟我说了句,可能是浏览器缓存问题。嘴角带着邪魅的笑,大概是这种
爸爸刚想测。于是爸爸在请求后面加了时间戳参数,第二次请求成功的发出去了。但是还是得向后台GG表示“感谢”
事后搜了下,发现 IE 浏览器对于没有明确表明是否缓存(强制缓存或者强制不缓存),默认的设置是“自动 automatically”,即在不关闭浏览器的情况下(同一个会话),刷新页面,对于相同url的请求并不会再次发送(即请求被缓存了),而 Edge 延续了 IE 这种“优良”的传统,坚决和主流浏览器保持“差异性”,所以会出现上面第二次请求退出接口的时候,请求都没有发出,直接就执行 location.reload() 了。

最后只想 po 一张图,自己体会