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)
| 归档时间: |
|
| 查看次数: |
25192 次 |
| 最近记录: |