当附加查询string参数或使用POST不是一个选项时,如何避免Internet Explorer 11中的AJAXcaching

我意识到这个问题已经被问到了,但是在现代REST实践中,这个问题以前的迭代和他们的答案都不是准确或充分的。 这个问题需要一个明确的答案。

问题众所周知,IE(甚至11)cachingAJAX请求,这真的很愚蠢。 大家都明白这一点。

不好理解的是,以前的答案都不够。 SO上这个问题的每一个例子都被标记为充分回答:

1)在每个请求上使用唯一的查询string参数(如unix时间戳),以使每个请求的URL唯一,从而防止caching。

– 要么 –

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

– 要么 –

3)使用由服务器传递的“caching控制”头。

国际海事组织在涉及现代REST API实践的许多情况下,这些答案都不是足够的或实际的。 对于POST和GET请求,REST API将具有完全不同的处理程序,具有完全不同的行为,所以POST通常不是GET的适当或正确的替代方法。 同样,许多API都有严格的validation,并且由于许多原因,当提供查询string参数时,会产生500或400个错误,这些错误是他们不希望的。 最后,我们通常会与第三方或其他不灵活的REST API进行接口,因为我们无法控制服务器响应所提供的头文件,并且添加caching控制头文件不在我们的范围之内。

所以,问题是:

在这种情况下,客户端是否真的没有办法阻止IEcachingAJAX GET请求的结果呢?

caching通常通过设置服务器返回的内容头来控制。 如果你已经这样做了,而且IE仍然忽略它们并caching,唯一的解决办法就是使用你的问题中提到的一种caching清除技术。 在API的情况下,在尝试任何caching清除技术之前,确保使用适当的caching标头可能会更好。

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

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