我意识到这个问题已被提出,但在现代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请求的结果?
我通过Jasmine,Karma和各种浏览器进行测试.我目前正在调试一个仅在PhantomJS中失败的测试.
我想调试这个调用,所以我在karma中设置了一个自定义PhantomJS启动器,它在调试端口打开的情况下运行它.
我可以通过该端口访问Chrome中的远程调试器,但是,它似乎对我的任何测试文件一无所知.它报告"about:blank"和"localhost:9876"(Phantom正在击中的karma服务器),但是当我尝试调试该位置时,它没有显示任何源文件或Jasmine规范文件.
有没有人见过这种行为?我已经阅读了关于远程调试功能的PhantomJS文档,他们没有对这个问题有所了解,AFAIK.