簡體   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