我使用的是Chrome开发者工具(第49版).在"网络"选项卡下,有一系列列,例如"名称","状态","类型"等.有没有人知道连接ID列的用途每一行都有一个ID,如13461,14410,8738,8741,13516 ....这些数字是什么意思?
HTTP在后台使用称为TCP的网络协议.浏览器维护TCP套接字和连接池.DevTools中的连接ID号指的是特定的TCP连接.它们为什么有用?好吧,来自Umar Hamsa(谷歌开发者专家)的这篇文章:
Canary中新的" 连接ID网络面板"列可以帮助指示重新使用 TCP连接而不是握手并建立新连接.
让我解释一下这意味着什么:
在第一次看到一个特定连接ID,一个新的连接将(可能)需要通过所谓要建立TCP握手.这对于性能原因很重要,因为TCP握手会导致相对较大的网络开销.我们正在创建一个新连接,因此获取HTTP响应需要更长的时间.
但是,对于您看到相同ID 的后续时间,将不会产生此开销.也就是说,浏览器不需要执行TCP握手并将重用相同的连接.这里我们说TCP连接仍然是"开放"的.已建立的连接可以更快地获取HTTP响应数据.
因此,这些数字基本上有助于检查/调试是否存在由TCP握手引起的网络开销.
例如:
Name Connection ID (TCP Handshake / Reused Connection) foo.jpg 72218 Handshake bar.jpg 72218 Reused cat.jpg 79146 Handshake baz.jpg 72218 Reused dog.jpg 79146 Reused
在这里,有参与下载的开销foo.jpg
,并cat.jpg
因为TCP握手需要建立连接72218
,并79146
分别.但是bar.jpg
,baz.jpg
并且dog.jpg
没有开销,因为它们正在重用它们各自的TCP连接.
注1:重用TCP连接以避免重复TCP握手的这种想法是HTTP 1.1的一个称为持久连接的特性.默认情况下,所有HTTP 1.1连接都使用持久连接,所有现代浏览器都使用HTTP 1.1.有关详细信息,建议您阅读高性能浏览器网络书籍的第11章和第14章.
注意2:如果HTTP请求需要TCP握手,您将在DevTools瀑布中看到一个橙色条,如果将鼠标悬停在它上面,您将看到"初始连接" - 这将告诉您握手花了多长时间以毫秒为单位.TCP连接可以在选项卡和窗口之间重复使用,因此请注意 - 您可能第一次看到ID,但可能没有TCP握手!这可能是因为您之前访问过该页面并打开了与该主机的连接.这也可能是因为Chrome从主机中预取了资源 - 例如,当您在栏中输入地址时,Chrome会预取一个图标.
注意3:在较新版本的Chrome中,您可以在chrome:// net-internals /#http2中查看HTTP连接列表,其中显示了连接ID和主机.