2012-08-30 19 views
10

我遇到ExpressJS的一些奇怪行为。对第二次请求我的node.js/express API URL时,它总是返回304未修改的响应代码给IE。其他浏览器获得200(Chrome/FF)。问题是,即使内容实际上已被更改,它也会返回304。我试图搜索,并找不到有关该主题的任何内容。此外,我试图找到IE和Chrome的请求标题中的差异,并可能看到任何可能导致此问题的标头。任何帮助将不胜感激。针对IE重复请求快速返回304

我要补充的连接通过SSL去,万一它的事项

+0

你如何确定IE获得的响应代码? – josh3736

+0

+1我有同样的问题! – Erik

+0

josh3736,我正在检查网络登录IE开发者工具 – bbbonthemoon

回答

2

好吧,我设法通过增加Cache-Control头

+0

这是更多的解决方法。希望有人可以发布解决方案。 – Brad

3

解决它的Cache-Control头一种变通方法。该错误是在Internet Explorer中解释头部的HTTP 1.1规范。

我将此添加到我的路由处理程序,它解决了问题。您还需要一个Last-ModifiedETag标题,但快递已经发送给我了。

res.setHeader("Expires", "-1"); 
res.setHeader("Cache-Control", "must-revalidate, private"); 

参见:Make IE to cache resources but always revalidate

4

有同样的问题我环顾了很多,事实证明,其实这个问题是来自阿贾克斯的愚蠢积极的缓存获得通过IE浏览器的请求。事实上,当你看到这个304时,实际请求永远不会访问服务器,但IE会响应来自其缓存的最新数据。这是MS的预期行为,因此只有解决方法。

我的首选是为每个ajax get请求附加一个包含当前时间的无用查询参数。它将强制IE始终从服务器中检索。的好处是,如果你使用jQuery,您可以用

$.ajaxSetup({cache:false}) 

另一个解决办法是使用POST请求,而不是把它配置到这个自动,但这并不总是一个选择。