小编fac*_*tum的帖子

从chrome到node-http2服务器使用HTTP/2时,请参阅多个TCP连接

更新(对任何对结果感兴趣的人:)

我无法弄清楚为什么chrome和node-http2服务器之间的下一次协议协商失败.我的怀疑是自签名证书或ALPN/NPN支持问题.所以我转向 golang HTTP/2实现.相同的设置工作完美,我看到单个多路复用TCP连接(chrome - > golang)


我一直在阅读关于HTTP/2以及它如何解决HTTP/1.1的延迟问题,每个主机使用单个多路复用TCP连接,所以我决定尝试一下.

本实验

  • 创建了一个简单的html文件,引用了一个css,一个js和几个图像.
  • Node.js中的一个简单的http服务器,它提供所有这些文件
  • 使用chrome来发出http请求
  • 在Ubuntu(tcptrack)上使用tcptrack 来跟踪对http服务器的TCP连接.

tcptrack窗口显示已建立4个连接.因此浏览器为图像和css/js请求打开了不同的连接.

来自chrome的http/1.1请求的Tcp跟踪输出

我使用tcpdump得到类似的输出.供参考使用tcptrack命令

tcptrack -d -i eth0 -r 3600 port 8989

和tcpdump也显示类似的输出

tcpdump -i eth0 -nns 0"dst port 8989和tcp [tcpflags] == tcp-syn"

服务这些文件的简单的一体化http服务器如下所示(相关代码)

(function(){
  ...........
  var server = http.createServer(function(request, response) {
      ..........
      fs.readFile(filetoRet, function (err,data) {
      if(filePath.indexOf(".jpg") >-1){
        response.writeHead(200, {"Content-Type": "image/jpg"});
      }.....
      
      response.write(data);
      response.end();
      });

   
  });
   

  server.listen(8989);  
})()
Run Code Online (Sandbox Code Playgroud)

在此之后我尝试使用http/2.

  • 启用chrome标志以发送http/2请求
  • 使用node-http2创建了一个http/2服务器
  • 简单的http服务器与http/1.1具有相同的代码,只是它使用在步骤2中安装的http2服务器模块.
  • 使用chrome发出请求(它需要是内联HTTP/2规范的https请求)
  • 捕获tcptrack/tcpdump输出

tcptrack为http/2输出

因此,这仍然显示正在进行多个TCP连接.此外,如果我增加html中的图像数量,连接数会增加.

所以我不知道怎么读这个.这是HTTP/2应该如何表现(或者这是一个chrome bug)?有没有更好的方法来使用简单的http/2客户端服务器可视化HTTP/2增益?

注意:我正在为HTTP/2服务器使用自签名证书,因此chrome在继续访问页面之前会发出警告,可能那些已关闭的连接代表它但我不认为它会影响协议请求页面及其组件的方式

感谢大家耐心阅读本文并感谢任何建议.

msingh

PS:Wireshark TCP捕获也不例外.只是我发现在Wireshark中隔离流量更难,所以使用了tcpdump和tcptrack. …

tcp google-chrome http node.js http2

6
推荐指数
1
解决办法
1278
查看次数

标签 统计

google-chrome ×1

http ×1

http2 ×1

node.js ×1

tcp ×1