iOS上的Safari涉及过时的$ http.get结果

时间:2014-11-11 22:56:36

标签: javascript ios angularjs http mobile-safari

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

但是,Safari声称状态为200(不是304),即使结果已过时......令人不安

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

我如何强制Safari刷新其缓存是添加一个随机参数:

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

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


我的服务器返回此响应标头:

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

1 个答案:

答案 0 :(得分:1)

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

您可以继续使用解决方法,也可以在响应中添加缓存控制标头,以告知Safari不要缓存您的响应。

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

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