我刚刚注意到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
答案 0 :(得分:1)
您的响应没有任何缓存控制标头。根据这个answer浏览器,如果没有缓存控制头,可以随意做任何他们想做的事情。在你的情况下,iOS上的Safari决定缓存内容,即使这不是你想要的。
您可以继续使用解决方法,也可以在响应中添加缓存控制标头,以告知Safari不要缓存您的响应。
请注意,RFC可能会说如果没有缓存控制标头,则不应缓存响应。 (我没有检查过)。但浏览器通常具有非标准行为,您必须解决这些问题。
顺便说一句 - 在我的计算机网络工作的早期,我认为不支持不遵循RFC的浏览器和网络服务器是可以的。我错了。