为什么我的浏览器有2个请求?

时间:2017-03-02 07:38:13

标签: http browser server

我有一个简单的节点服务器。它所做的就是记录req.headers和res(我正在学习!)。

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个请求! 什么是浏览器,为什么?

1 个答案:

答案 0 :(得分:1)

很难说没有看到完整的交易数据(例如,请求是什么,即GET或POST之后发生了什么 - 以及服务器的答案是什么)。

但它可能是由'upgrade-insecure-requests': '1'标题引起的:

  

当服务器在HTTP请求的标头中遇到此首选项时,   它应该将用户重定向到可能安全的表示形式   被请求的资源。

请参阅this

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

另一方面,第二个请求可能仅适用于图像,很可能是iPad / iPhone的favicon.ico或(更大)图标(可以解释3个请求)。您应该查看完整的请求数据以确定。

您可以在浏览器中使用F12 en select network查看实际情况。