【问题标题】:Why is the request event being fired twice为什么请求事件被触发两次
【发布时间】:2019-04-01 21:02:22
【问题描述】:

我有一个如下所示的服务器:

const http2 = require('http2');
const {
    HTTP2_HEADER_METHOD,
    HTTP2_HEADER_PATH,
    HTTP2_HEADER_STATUS,
    HTTP2_HEADER_CONTENT_TYPE
  } = http2.constants;

const fs = require('fs');

const server = http2.createSecureServer({
  key: fs.readFileSync('./ssl/localhost-privkey.pem'),
  cert: fs.readFileSync('./ssl/localhost-cert.pem')
});


server.on('error', (err) => {
    console.error(err);
});

server.on('stream', (stream, headers,flags) => {
  stream.respond({
    'content-type': 'text/html',
    [HTTP2_HEADER_STATUS]: 200,
    [HTTP2_HEADER_CONTENT_TYPE]: 'text/plain'
  });
  stream.end('<h1>Hello World 2</h1>');
});



server.on('request', (msg) => {
  /* THIS IS BEING FIRED TWICE*/
   console.log('request:' + JSON.stringify(msg) );
});


server.on('session', (msg) => {
 /* THIS IS ALSO BEING FIRED TWICE*/
    console.log('session:' + JSON.stringify(msg) );
});

 server.listen(8443);

在我的浏览器中输入网址https://myserver:8443。在我的服务器上,我可以看到会话事件被控制台记录了两次。为什么会发生这种情况,因为我只提出一个请求?每次我刷新页面时,请求事件都会被触发两次,而不是只触发一次。我正在使用 nodejs 11.0.0

【问题讨论】:

    标签: node.js http2


    【解决方案1】:

    您应该使用console.log(msg.url) 记录所请求的 URL。您可能会发现其中一个请求是针对 favicon.ico 的,因为这是浏览器在没有为特定域缓存的 favicon 时会请求的内容。

    Web 服务器的所有请求都必须查看所请求的实际资源,并根据所请求的确切资源做出适当的响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2020-04-15
      相关资源
      最近更新 更多