对于火狐CP的一些猜测

背景

抓包之余研究了下 chrom-timing 和 firefox-timing。打开百度的时候发现,
200 https://www.baidu.com/ 耗时238毫秒
200 https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super 耗时38毫秒
200 https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?qua=high&where=super 耗时107毫秒
后两个请求可以说是一样的,为什么后者耗时是前者的 2.8 倍呢?
先看看第一个请求:
38毫秒

再看看第二个请求:
100毫秒

分析下第二个请求

  1. blocking 36毫秒,原因是 Firefox 的连接池用完了,要等待释放空闲连接
  2. DNS耗时 1毫秒,这么短的时间建立TCP连接都不够,所以判断是读了 Firefox对DNS的缓存(默认),或者是读了操作系统缓存
  3. 连接耗时 9毫秒,看了下请求头,cache-control:no-cache,有CDN就是任性。Connection:keep-alive,看样子是没保活
  4. TLS建立 21毫秒,安全的代价,TLS握手甚是折腾,这个表现已经很不错了
  5. 发送、等待、接收都是 HTTP 的职责,和一个请求没拉开差距

为什么 keep-alive 没生效

第二个请求开始前,第一个请求还没有完成接收,因此没有 keep-alive。
但发现后面又有新请求重建了TCP连接,猜测是浏览器的线程池不够大,回收了部分连接去访问别的网站。

Reference

[1]控制Firefox浏览器DNS的缓存时间
[2]火狐网络监控器文档
[3]微软教你TLS
[4]HTTPS协议详解

猜你喜欢

转载自www.cnblogs.com/mougg/p/12620369.html