http - 即使禁用缓存,Safari 也会缓存 GET 请求
问题描述
我已将所有我知道的标头设置为在我的服务器上禁用缓存(甚至禁用 ETAG),但 Safari 仍然偶尔(大约 50% 次)缓存我的请求。
工作流程
我正在实施oauth 1,所以:
浏览器发出
GET /api/user
请求服务器返回 405
浏览器重定向到第三方网站进行身份验证
浏览器被重定向到
api/callback
将一些信息存储到 cookie 中的位置。浏览器被重定向回原始路由。
浏览器发出
GET /api/user
应该成功的请求,但是它从磁盘缓存中获得了 405 服务。
来自 Safari Network Inspector 的请求摘要
概括
网址: http://localhost:3000/api/user
地位: 405 Method Not Allowed
来源: Disk Cache
要求
没有请求,从磁盘缓存提供。
回复
传输编码: Identity
内容类型: application/json; charset=utf-8
语用: no-cache
缓存控制: private, no-cache, no-store, must-revalidate, max-age=0
各不相同: Cookie, Accept-Encoding
日期: Wed, 23 Jan 2019 11:34:23 GMT
内容编码: gzip
过期: Thu, 01 Dec 1994 16:00:00 GMT
联系: close
x-供电: Express
结论
我不知道出了什么问题,我将非常感谢任何帮助。我的 Safari 版本是12.0.2
. 我无法用 Chrome 复制这个问题。
解决方案
使用Vary: *
. 这神奇地解决了我的问题。
这个答案帮助了我:https ://stackoverflow.com/a/2068353/1364158
或者,您可以通过在您的 url 中包含一些无意义的随机查询 arg 来真正强制浏览器加载新版本的请求,例如/api/user?ts=18284