如果无法选择其他查询字符串参数或使用POST,如何避免Internet Explorer 11中的AJAX缓存

sto*_*lli 66 ajax internet-explorer caching

我意识到这个问题已被提出,但在现代REST实践中,此问题的先前迭代及其答案都不准确或充分.需要对这个问题给出明确的答案.

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

什么是容易理解的是,没有对以前的答案是足够的.SO上此问题的每个前一个实例都标记为:

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

- 要么 -

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

- 要么 -

3)使用服务器传递的"cache-control"标头.

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

所以,问题是:

在这种情况下,是否真的没有什么可以在客户端完成,以防止IE缓存AJAX GET请求的结果?

use*_*654 54

通常通过在服务器返回内容时设置内容标头来控制缓存.如果你已经这样做了,IE无视它并忽略它们,那么解决它的唯一方法就是使用你问题中提到的一种缓存破坏技术.对于API,在尝试任何缓存清除技术之前,最好确保使用正确的缓存头.

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

Cache-control: no-cache
Cache-control: no-store
Pragma: no-cache
Expires: 0
Run Code Online (Sandbox Code Playgroud)

  • @stolli对于同龄人压力徽章非常重要。 (2认同)