HTTP 301 浏览器缓存的坑
文章目录
问题描述
这两天调试一个nginx配置的问题,一开始一直以为是nginx的缓存配置的问题,我反复的翻阅nginx的配置文档,实在找不出配置有啥问题。
于是打开chrome的开发者工具,发现相关请求一直报301 Moved Permanently (from disk cache)
,一开始没有留意,因为我已经开启了
打开开发者工具就禁用缓存的选项,我反复检查nginx的配置,再检查nginx的日志,反复确认没有问题后,我开始怀疑是chrome的问题,
也就是说,请求并没有发送给nginx,而是chrome直接响应了请求,把磁盘缓存中的内容直接返回给了浏览器。
问题解决
既然怀疑是chrome的问题,那怎么解决呢。最简单的方法就是清空chrome的缓存了。
选择设置
,然后搜索清除浏览数据
,然后点击高亮显示的内容,按照提示进行清理即可。
清理完缓存之后,再次进行测试,发现果然不是nginx配置的问题,请求返回了期待已久的结果。
问题发散
从上面的情况来看,开发者工具里面的Disable cache(while DevTools is open)
的选项对于返回结果为301的请求无效。
那么有没有办法避免再次遇到同样的问题呢?google一下,可能的方法如下:
- 在服务器端控制,对于返回代码为301的请求,添加缓存控制;
- 在浏览器端控制,不缓存返回代码为301的请求,而是再次获取请求的页面;