2017-03-02 8 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つの要求を送信します。私はクロムを使用するとき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

あなたはどのように正確にあなたの要求をクロームで送信しますか? – Schlangguru

答えて

1

完全なトランザクションデータが表示されなくても大したことはありません(たとえば、リクエストとは何か、つまりGETまたはPOSTの後に来るものと、サーバーからの回答は何かなど)。

しかし、'upgrade-insecure-requests': '1'ヘッダによって引き起こされることができる:サーバはHTTPリクエストのヘッダにこの環境に遭遇すると

、 それは要求され リソースの潜在的に安全な表現にユーザをリダイレクトすべきです。

thisを参照してください。一方


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

、2番目の要求は画像のみ、最も可能性の高いfavicon.icoまたは多分のiPad/iPhoneのための(大きな)アイコン(つまり3つの要求を説明することができる)のために、おそらくです。完全なリクエストデータをチェックアウトする必要があります。

ブラウザでF12 en select networkを使用すると、実際に何が起こっているかを確認できます。

+0

'req'データ全体を読むと' favicon.ico'リクエストについて正しいと思われます。ありがとう – leonormes

関連する問題