惨痛的经历
最近遇到一件糟心事儿,运营线下推广用的物理中的二维码是很早之前的下载APP的URL,这个下载地址打开后直接跳转到腾讯应用宝;后来我们需要修改跳转的地址,发布上线后,页面打开还是跳转到老地址,怎么弄都不生效,只有新用户才能正常使用。
第一直觉就怀疑是缓存的问题,但是我们抓吧却发现,打开下载地址根本抓不到下载地址的HTML包,只能抓到腾讯应用宝的地址。
这也就是说虽然我打开的是A链接,但是浏览器根本就没有跳转到A链接,而是直接跳转到了应用宝。
原因
后来多方查询才知道,问题的原因是因为这个页面之前是直接跳转到应用宝的,浏览器缓存了这个301重定向,后续的打开其实没有打开下载地址,而是直接使用缓存的重定向跳转到应用宝。
缓存时长
每个浏览器对重定向的缓存时长都不一样
- IE7, IE8 不会缓存301
- IE 11 会缓存301,时间未知,重启无效
- Chrome 会缓存301,时间未知,重启无效
- Firefox 会缓存301,时间未知,重启无效
如何规避
我们可以对必要的HTML页面禁用缓存,如何完美滴使浏览器访问一个 HTML页面时禁用缓存?
可以在Head中使用mete标签来禁用缓存:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
no-cache 表示不缓存过期资源,缓存会向服务器进行有效处理确认之后处理资源,即 304
no-store 才是真正的不进行缓存。