繁体   English   中英

在AJAX请求之后,Chrome会在HTTP 205响应中下载重新加载的页面

[英]Chrome downloads the reloaded page on HTTP 205 response after an AJAX request

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

我使用此状态代码告诉请求者重置文档视图

这是我使用的代码片段

$.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)不是刷新页面,而是在调用window.location.reload下载 正在重新加载 dump 的页面的响应内容

这是我尝试过的

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

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

Chrome即可下载

附加信息(以及更深入的调查)

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

为什么Chrome和Opera在205 HTTP响应中的行为如此?

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

从第837行开始的注释与第850行的代码不匹配:即注释没有提到205必须是零长度,但代码对待205就像1xx,204和304.这实际上是唯一的眨眼代码我可以找到提到205(定义常量之外)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM