gpt4 book ai didi

javascript - iOS 上的 Safari 涉及陈旧的 $http.get 结果

转载 作者:行者123 更新时间:2023-11-29 02:31:00 25 4
gpt4 key购买 nike

我刚刚注意到 iOS 上的 Safari 将陈旧的 $http.get 结果保存在缓存中,以我的服务器为目标(REST 调用)。

但是,Safari 声称状态为 200(不是 304),即使结果是陈旧的......令人不安

我确认问题来自 Safari,因为通过对服务器的 rest 调用很容易检查真实结果。

我为强制 Safari 刷新其缓存所做的是添加一个随机参数:

$http.get('myUrl?rnd=' + new Date().getTime())

有更好的做法吗?可能直接更改服务器上的响应 header ?


我的服务器返回这个响应头:

HTTP/1.1 200 OK
Server: Cowboy
Date: Tue, 11 Nov 2014 23:52:59 GMT
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 495
Via: 1.1 vegur

最佳答案

您的响应没有任何缓存控制 header 。根据这个answer如果没有缓存控制 header ,浏览器可以自由地做任何他们想做的事。在您的情况下,iOS 上的 Safari 已决定缓存内容,即使这不是您想要的。

您可以继续使用您的解决方法,或者您可以在响应中添加缓存控制 header 以告诉 Safari 不要缓存您的响应。

请注意,RFC 可能会说如果没有缓存控制 header ,则不应缓存响应。 (我没有检查过)。但浏览器通常有非标准行为,您必须解决这些问题。

顺便说一句 - 在我从事计算机网络工作的早期,我认为不支持不遵循 RFC 的浏览器和网络服务器是可以接受的。我错了。

关于javascript - iOS 上的 Safari 涉及陈旧的 $http.get 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26876168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com