【问题标题】:Chrome downloads the reloaded page on HTTP 205 response after an AJAX request在 AJAX 请求后,Chrome 会在 HTTP 205 响应中下载重新加载的页面
【发布时间】:2014-05-19 12:25:22
【问题描述】:

在一个项目上工作,我只是发出一个 AJAX 请求来处理一些数据。
服务器完成工作后,返回HTTP 205 RESET CONTENT 响应

我用这个状态码告诉请求者reset the document view

这是我使用的一段代码

$.ajax({
    url: '/unread',
    method: 'PUT',
    data: {
        notifications: elements
    }
}).done(function(content, message, xhr) {
    if (205 !== xhr.status) {
        // Generic error message
        return;
    }

    window.location.reload(true)
}).fail(function() {
    // Generic error message
})

这在 Internet Explorer (8 及更高版本)、Firefox (28.0) 和 Opera (12.16) 上运行良好。然而 Chrome (33.0) 和 Opera (20.0) 不是刷新页面,而是下载响应内容正在重新加载的页面dump 当调用window.location.reload

这是我尝试过的

  • window.location.href = window.location.href 给出相同的结果
  • history.go(0) 给出相同的结果
  • 如果我删除 window.location.reload,则不会重新加载任何内容
  • 清除缓存、删除本地状态或进入私人导航不会改变任何事情
  • 如果我更改响应代码(例如 204),它可以正常工作

这是正在发生的事情的视觉网络

其他信息(和更深入的调查)

  • 我使用的是 Ubuntu 12.04
  • 错误可能在另一台装有 Windows 7 的计算机上重现(相同的 chrome 版本)
  • 无法在装有 Debian 7.1(相同 chrome 版本)的其他计算机上重现错误

为什么 Chrome 和 Opera 在 205 HTTP 响应中会出现这样的行为?

【问题讨论】:

  • 由于 AJAX 请求是在 后台 中发出的,因此您不能期望对某些 HTTP 响应代码的反应与收到响应 direct 浏览器的请求……也是如此 fe用于 301/302/位置重定向。
  • 这就是为什么我想知道它为什么会这样。对于这种情况,AJAX 响应状态代码应该无关紧要。但确实如此,而且仅限于 chrome。
  • 也许我没有正确理解您的意思……那么在这种情况下,Chrome 究竟“下载”了什么?
  • 如果不清楚,抱歉。它将重新加载的页面下载为转储here(不是带有 205 响应代码的请求)
  • 你能告诉xhr.status的内容是什么吗?它是一个字符串吗?像'205'?

标签: javascript ajax google-chrome http-status-codes


【解决方案1】:

我能找到的最接近的是它可能是一个错误,因为在这个文件中: https://chromium.googlesource.com/chromium/chromium/+/trunk/net/http/http_stream_parser.cc

从第 837 行开始的注释与第 850 行的代码不匹配:即注释没有提到 205 的长度必须为零,但代码将 205 视为 1xx、204 和 304。这实际上是我能找到的唯一闪烁代码提到了 205(在定义常量之外)。

也许也值得尝试最新的 Opera 版本;如果问题也发生在那里,它更强烈地指向 Blink 源代码中的错误。

【讨论】:

  • 我也开始想到一个错误,但我在您提供的链接中看不到任何可能与问题相关的内容。刚刚用 Opera 12.16 试了一下,示例运行良好
  • 我认为您至少需要 Opera 15 才能使用 blink;我猜你是在 Linux 上?
  • 你是对的!我在 Opera 20 中进行了测试(对于 Windows,因为它不适用于 Linux)并且发生了同样的问题
  • 尽管这不能回答问题,但这是最接近(也是唯一)可用的答案。因此,我会将赏金奖励给您,但未回答此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多