【问题标题】:express returns 304 for IE repeative requestsexpress 为 IE 重复请求返回 304
【发布时间】:2013-01-11 18:32:57
【问题描述】:

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

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

【问题讨论】:

  • 你如何确定 IE 得到什么响应代码?
  • josh3736,我正在 IE 开发者工具中检查网络日志

标签: internet-explorer node.js express


【解决方案1】:

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

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

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

见:Make IE to cache resources but always revalidate

【讨论】:

    【解决方案2】:

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

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

    $.ajaxSetup({cache:false})
    

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

    【讨论】:

    • 为什么 IE 撒谎说它得到了 304?像这样的愚蠢事情让使用 IE 成为一种绝对的痛苦......
    • 另外:不要为此滥用 POST,因为这只是错误地实现了 HTTP 方法。相反,请使用时间戳解决方案或 Cache-Control 解决方案。
    【解决方案3】:

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

    【讨论】:

    • 这更像是一种解决方法。希望有人可以发布解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2019-10-13
    • 1970-01-01
    • 2021-01-05
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多