我已将据我所知的所有 header 设置为在我的服务器上禁用缓存(甚至禁用 ETAG),但 Safari 仍然偶尔(大约 50% 次)缓存我的请求。
工作流程
我正在实现 oauth 1,所以:
浏览器发出
GET/api/user
请求服务器返回 405
浏览器重定向到第三方网站进行身份验证
浏览器被重定向到
api/callback
,它将一些信息存储到 cookie 中。浏览器被重定向回原始路由。
浏览器发出
GET/api/user
请求,该请求应该会成功,但它却从磁盘缓存中获取了 405 错误。
来自 Safari Network Inspector 的请求摘要
摘要
URL: http://localhost:3000/api/user
状态: 405 方法不允许
来源: 磁盘缓存
请求
无请求,从磁盘缓存提供服务。
响应
传输编码: 身份
内容类型: application/json;字符集=utf-8
编译指示: 无缓存
缓存控制: 私有(private)、无缓存、无存储、必须重新验证、max-age=0
变化: Cookie,接受编码
日期: 2019 年 1 月 23 日星期三 11:34:23 GMT
内容编码: gzip
过期时间: 1994 年 12 月 1 日星期四 16:00:00 GMT
连接: 关闭
x-powered-by: Express
结论
我不知道出了什么问题,我将非常感谢任何帮助。我的
Safari 版本为 12.0.2
。我无法使用 Chrome 重现此问题。
最佳答案
使用变化:*
。这神奇地解决了我的问题。
这个答案帮助了我:https://stackoverflow.com/a/2068353/1364158
或者,您可以通过在网址中包含一些无意义的随机查询参数来强制浏览器加载新版本的请求,例如/api/user?ts=18284
关于http - 即使禁用缓存,Safari 也会缓存 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54326697/