2017-01-03 53 views
0

我有以下簡單的設置:爲什麼服務器回調多次觸發

const http = require('http'); 

http.createServer(function (req, res) { 
    console.log('incoming'); 
}).listen(8127); 

當我做從瀏覽器的請求時,它。OUPUTS incoming內的一些相當長的時間間隔進行連續。爲什麼會發生?

我懷疑一個瀏覽器連接到服務器,發送一些數據,但由於我沒有在我的代碼中的任何地方調用res.end(),它沒有得到任何迴應。所以它等待一段時間,然後再次發送請求。這是對的嗎?如果是這樣,我怎麼能看到它發生在較低的水平?

+1

您可以嘗試傾倒'res'。通常,單個頁面加載將觸發3個或更多HTTP請求(通常至少2個)。一項請求將是主要的要求。另一個用於選項卡圖標。另一個嘗試查看您是否支持HTTPS(這是HTTPS無處不在努力的一部分,以確保互聯網安全)。這假設你的頁面是一個純文本頁面,沒有媒體內容(圖像,視頻,聲音等),沒有外部CSS或JS。 – slebetman

+0

@slebetman,謝謝,但這些請求發生在大約5分鐘的時間間隔內,並且在瀏覽器顯示錯誤之前,大概有10個請求。 –

回答

1

您的懷疑是正確的。根據HTTP/1.1 memo

如果HTTP/1.1客戶端發送請求,其包括請求的身體, 但不包括一個Expect請求頭字段與 「100-繼續」期望,並且如果客戶端不是直接連接到HTTP/1.1源服務器的 ,並且如果客戶端在接收到來自服務器的任何狀態之前看到 連接關閉,則 客戶端應該重試該請求。

瀏覽器在一段時間後發出請求重試。

從node.js端:http.createServer回調正在通過EventEmitter模型工作,並在每次服務器請求時調用。如果你想探索響應對象會發生什麼 - 你可以試着用--inspect標誌和調試來啓動服務器。

相關問題