对于IE重复请求,表达返回304

时间:2012-08-30 21:13:58

标签: internet-explorer node.js express

我遇到了ExpressJS的一些奇怪行为。在对我的node.js / express基于API的URL的第二次请求时,它总是向IE返回304 Not Modified响应代码。其他浏览器获得200(Chrome / FF)。问题是,即使内容实际已被更改,它也会返回304。我试图搜索,但在这个主题上找不到任何东西。此外,我试图在IE和Chrome的请求标头中找到差异,并且可以看到任何可能导致该标头的标头。任何帮助将不胜感激。

我必须通过SSL添加连接,以防它重要

3 个答案:

答案 0 :(得分:6)

Cache-Control标头 是一种解决方法。该错误在于Internet Explorer对头1.1的HTTP 1.1规范的解释。

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

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

请参阅:Make IE to cache resources but always revalidate

答案 1 :(得分:5)

遇到同样的问题我看了很多,事实证明问题来自IE的ajax get请求的愚蠢积极缓存。实际上,当您看到304时,实际请求永远不会到达服务器,但IE会使用其缓存中的最新数据进行响应。这是MS的预期行为,因此只有解决方法。

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

自动配置它
$.ajaxSetup({cache:false})

另一种解决方法是使用POST请求而不是GET,但这并不总是一种选择。

答案 2 :(得分:3)

好吧,我设法通过添加Cache-Control标头来修复它