gpt4 book ai didi

ajax - 当附加查询字符串参数或使用 POST 不是选项时,如何避免 Internet Explorer 11 中的 AJAX 缓存

转载 作者:行者123 更新时间:2023-12-04 22:21:32 24 4
gpt4 key购买 nike

我意识到有人问过这个问题,但在现代 REST 实践中,这个问题的先前迭代及其答案都不是准确或充分的。这个问题需要一个明确的答案。

问题是众所周知的,IE(甚至11)缓存AJAX请求,真的很笨。每个人都明白这一点。

不能很好理解的是,以前的答案都不够。 SO上此问题的每个先前实例均由以下任一者标记为已充分回答:

1)对每个请求使用唯一的查询字符串参数(如unix时间戳),从而使每个请求的URL唯一,从而防止缓存。

- 或者 -

2) 使用 POST 而不是 GET,因为 IE 不缓存 POST 请求,除非在某些特殊情况下。

- 或者 -

3) 使用服务器传递的“缓存控制” header 。

IMO 在许多涉及现代 REST API 实践的情况下,这些答案都不够充分或实用。 REST API 将具有完全不同的 POST 和 GET 请求处理程序,具有完全不同的行为,因此 POST 通常不是 GET 的适当或正确替代方案。同样,许多 API 围绕它们进行了严格的验证,并且由于多种原因,在输入它们不期望的查询字符串参数时会产生 500 或 400 个错误。最后,我们经常与第 3 方或其他不灵活的 REST API 交互,我们无法控制服务器响应提供的 header ,并且添加缓存控制 header 不在我们的能力范围内。

所以,问题是:

在这种情况下,客户端真的没有什么可以做来防止 I.E.从缓存 AJAX GET 请求的结果?

最佳答案

缓存通常是通过在服务器返回内容时在内容上设置 header 来控制的。如果您已经在这样做并且 IE 无论如何都忽略它们并进行缓存,那么解决它的唯一方法是使用您的问题中提到的一种缓存破坏技术。对于 API,最好在尝试任何缓存破坏技术之前确保使用正确的缓存 header 。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ

Cache-control: no-cache
Cache-control: no-store
Pragma: no-cache
Expires: 0

关于ajax - 当附加查询字符串参数或使用 POST 不是选项时,如何避免 Internet Explorer 11 中的 AJAX 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261000/

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