如何在IE中使用REST API避免缓存?

4
我们有一个REST API,在Chrome中正常工作,但我们发现IE中使用了缓存的结果。
为了解决这个问题,需要客户打开Internet选项并更改设置“检查存储页面的更新版本”为“每次访问网页”。
我发现我可以在每个请求的末尾使用JavaScript添加日期时间。
 /v1/getInfo?Date = (new Date()) 

然而这意味着我需要告诉所有客户这样做。 有没有更好的方法来做到这一点,使我的请求看起来像这样?
 /v1/getInfo 

如何在不更改URL的情况下实现?


你可以添加HTTP头部来指示浏览器不要缓存。 - Lloyd
2个回答

4

对于这个任务,您应该在应用程序中设置正确的HTTP头。缓存由Cache-Control头控制:

Cache-Control: no-cache

虽然这本身并不是十分可靠,所以你可能需要设置其他头部信息。这个指南看起来写得很好。

2

检查你的API返回了哪些头信息。特别要检查Expires和Cache-Control头信息的配置。这些头信息告诉浏览器/客户端存储消息正文的本地副本,并在下次请求相同资源时使用该副本。


如果您可以在浏览器控制台中查看返回的标头,我可能能够告诉您哪些标头导致了问题,以及需要更改为什么。 - kieranpotts
我看到一个响应键头的值为 'Http/1.1 304 Not Modified',但相应的请求没有 'IF-Modified-Since' 或 'ETag' 头,我认为这应该会导致 304。请求头如下:键 值 请求 GET /v1/test/data HTTP/1.1 授权 Basic dXNlcjo= 接受 application/json, text/plain, / 会话 1472A39E6B9476442C296BD168E121F 引用 http://192.21.23.11/ 接受语言 en-US 接受编码 gzip, deflate 用户代理 Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko - JD.
有趣。请求中也没有“If-None-Match”头吗? - kieranpotts
我们一定要让您的服务器在响应确实发生变化时始终返回200 OK,而不是304 Not Modified。这就是问题所在。 - kieranpotts
1
你知道,在这种情况下,如果服务器端应用程序不是你的责任,我认为你最初建议的推荐用户在查询参数中提供当前时间戳以绕过本地缓存,是一个非常好的解决方案。实际上,它需要对服务器端配置进行更改,但如果这不可能,那么这可能是最好的解决方法。 :) - kieranpotts
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接