【问题标题】:Safari Caching GET request even with disabled cache即使禁用缓存,Safari 也会缓存 GET 请求
【发布时间】:2019-01-23 11:53:58
【问题描述】:

我已将我知道的所有标头设置为在我的服务器上禁用缓存(甚至禁用 ETAG),但 Safari 仍然偶尔(大约 50% 次)缓存我的请求。

工作流程

我正在实施 oauth 1,所以:

  1. 浏览器发出GET /api/user 请求

  2. 服务器返回 405

  3. 浏览器重定向到第三方网站进行身份验证

  4. 浏览器被重定向到api/callback,它将一些信息存储到cookie中。

  5. 浏览器被重定向回原来的路由。

  6. 浏览器发出 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-powered-by: Express

结论

我不知道出了什么问题,我将非常感谢任何帮助。我的 Safari 版本是12.0.2。我无法使用 Chrome 重现此问题。

【问题讨论】:

    标签: http caching safari


    【解决方案1】:

    使用Vary: *。这神奇地解决了我的问题。

    这个答案帮助了我:https://stackoverflow.com/a/2068353/1364158

    或者,您可以通过在您的 url 中包含一些无意义的随机查询 arg 来真正强制浏览器加载新版本的请求,例如/api/user?ts=18284

    【讨论】:

    • 使用Vary: * 对我没有任何作用...我不得不手动清空缓存。
    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2012-08-26
    • 2020-09-02
    • 1970-01-01
    • 2016-12-16
    相关资源
    最近更新 更多