簡體   English   中英

XHR請求->獲取ERR_EMPTY_RESPONSE

[英]XHR request -> getting ERR_EMPTY_RESPONSE

我正在嘗試進行較長時間(2-5m)的提取請求,但是大約1m30后,我在Chrome控制台中收到此錯誤消息:

無法加載資源:net :: ERR_EMPTY_RESPONSE

因此,我試圖將我的XHR請求包裝在一個計時器中,如下所示:

客戶端代碼:

xhr.open('GET', '/refresh', true); 
xhr.timeout = 600000; 
xhr.onload = function () { 
   window.location.reload(); 
}; 
xhr.send(null);

服務器端代碼:

app.get("/refresh", (req, res) => {    
    var process = spawn('python3', ["scrape.py"]);
    process.stdout.on('data', function (data){
        console.log("-> " + data.toString());
        if ((data.toString().indexOf("done") > -1)) {
            res.json({done: "done"});
        }
    });
});

但是大約1點30分之后,我仍然遇到相同的錯誤,並且控制台日志“超時”。為什么?

如果我使用持續20秒的Python腳本運行完全相同的代碼,則可以正常運行。

謝謝

為防止瀏覽器由於缺少響應而超時,您必須在超時內向其發送響應(根據測試,聲音類似90年代)。 這意味着您的應用程序很可能需要重新設計。 由於看起來不像在使用websocket,因此服務器上的所有內容都是無狀態的並且是同步的,因此您必須手動使請求成為偽異步的:

歷史模式是:

  1. 產生的進程將其結果寫入某處
  2. 服務器應返回令牌( /refresh?token=1234 ),在該/refresh?token=1234 ,當請求時,在結果准備好時返回結果,否則返回狀態204之類的東西。
  3. 在初始響應中返回令牌
  4. 在客戶端中,超時會繼續檢查令牌,如果狀態== 204,請重置計時器,否則您將獲得完整的響應並退出計時器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM