浏览器对301重定向的缓存

3,858 阅读2分钟

惨痛的经历

最近遇到一件糟心事儿,运营线下推广用的物理中的二维码是很早之前的下载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 才是真正的不进行缓存。