2017-03-02 84 views
0

我有一個簡單的節點服務器。它所做的就是記錄req.headers和res(我正在學習!)。爲什麼我的瀏覽器有2個請求?

let http = require('http'); 

function handleIncomingRequest(req, res) { 
    console.log('---------------------------------------------------'); 
    console.log(req.headers); 
    console.log('---------------------------------------------------'); 
    console.log(); 
    console.log('---------------------------------------------------'); 
    res.writeHead(200, {'Content-Type': 'application/json'}); 
    res.end(JSON.stringify({error: null}) + '\n'); 
} 


let s = http.createServer(handleIncomingRequest); 
s.listen(8080); 

當我使用curl來測試服務器時,它發送1個請求。當我使用chrome時,它發送2個不同的請求。

{ host: 'localhost:8080', 
    connection: 'keep-alive', 
    'cache-control': 'max-age=0', 
    'upgrade-insecure-requests': '1', 
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 
    accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
    'accept-encoding': 'gzip, deflate, sdch, br', 
    'accept-language': 'en-GB,en;q=0.8' } 

{ host: 'localhost:8080', 
    connection: 'keep-alive', 
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 
    accept: 'image/webp,image/*,*/*;q=0.8', 
    referer: 'http://localhost:8080/', 
    'accept-encoding': 'gzip, deflate, sdch, br', 
    'accept-language': 'en-GB,en;q=0.8' } 

這是在隱身模式在正常模式下有3個請求! 瀏覽器在做什麼,爲什麼?

+0

您是否在網站上測試此功能?因爲在這種情況下,它可能是嵌入式圖像,css文件,腳本等的請求。瀏覽器自動發送單獨的http請求來獲取這些資源。 – Schlangguru

+0

沒有網站。我添加了服務器代碼。 – leonormes

+0

您是如何將您的請求發送給Chrome的? – Schlangguru

回答

1

很難說沒有看到完整的交易數據(例如,請求是什麼,即GET或POST後發生了什麼 - 以及服務器的答案是什麼)。

但它可能由'upgrade-insecure-requests': '1'頭造成的:

當服務器在HTTP請求中的頭遇到這種偏好, 它應該將用戶重定向到的 資源潛在的安全表示被請求。

請參閱this


accept: 'image/webp,image/*,*/*;q=0.8' 

在另一方面,第二個請求是可能是圖像而已,最有可能的favicon.ico或iPad/iPhone的可能是(大)的圖標(這可以解釋在3個請求)。您應該檢查完整的請求數據以確保。

您可以在瀏覽器中使用F12 en select網絡來查看真正發生的事情。

+0

通過閱讀整個'req'數據,似乎你對'favicon.ico'請求是正確的。謝謝 – leonormes

相關問題