11

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

我必须添加连接通过 SSL,以防万一

4

3 回答 3

6

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

我将此添加到我的路由处理程序中,从而解决了问题。您还需要一个Last-ModifiedETag标头,但 express 已经为我发送了该标头。

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

请参阅:使 IE 缓存资源但始终重新验证

于 2013-01-10T06:16:55.727 回答
5

有同样的问题我环顾四周,事实证明问题来自 IE 对 ajax get 请求的愚蠢激进缓存。事实上,当您看到这个 304 时,实际请求从未到达服务器,但 IE 会使用缓存中的最新数据进行响应。这是 MS 的预期行为,因此只有解决方法。

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

$.ajaxSetup({cache:false})

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

于 2013-01-11T10:32:57.037 回答
3

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

于 2012-08-31T20:31:13.850 回答