一个TCP连接可以发多少HTTP请求

本文详细探讨了HTTP与TCP的交互机制,包括HTTP/1.1的连接保持、多路传输特性、浏览器对同一Host的TCP连接数限制,以及如何高效处理大量资源请求。解析了Multiplexing和pipelining在提升网页加载速度中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

待解决问题:

1. 浏览器在与服务器建立一TCP连接后是否会在一次HTTP请求结束后关闭该TCP连接?如果会则何时会断开?

HTTP/1.1之前,一个服务器发送一HTTP响应后会关闭TCP连接,下次请求则会重新建立、关闭TCP连接,代价太大,在HTTP/1.1之后第一次HTTP响应结束后会在一定时间内保留TCP连接,这样第二次请求时长大大降低.

第一次请求第二次请求

上图对比发现第二次访问省略了SSL开销,Initial connection(初始化连接)时间,这也是为什么短时间内第二次访问该URL时间时长大大减少之原因.

2. 一个TCP连接可以对应多少HTTP请求?

接上一个答案,一个TCP连接在保活条件下(connection的keepalive:open)是可以发送多个HTTp请求的.

3. 一个TCP连接中HTTP请求可以打包发送或者响应吗(例三个请求一起发送,然后三个响应一起接收)?

pipelining了解下,请求:A、B、C 响应:A、B、C 不过存在一个问题,假设A请求时长很久那么等候的B,C请求都需要等待A求情完成后再开始,显然不合适,所以浏览器默认关闭pipeling.HTTP2 提供了 Multiplexing 多路传输特性即IO多路复用技术.使用了select、epoll等方式来降低阻塞等待,select、epoll同时监控多个文件描述符,当监控中的任何一个文件描述符有问题时,就立刻返回套接字可读,调用recvfrom处理数据。阻塞IO只能阻塞一个IO操作,而select能阻塞多个IO操作所以称之为IO多路复用。从select只能知道有IO操作,不能知道是哪个流,所以需要无差别轮询。而epoll会把哪个流发生了怎样的I/O事件通知我们,时间复杂度降低为O(1)。

4. 浏览器对同一Host建立TCP连接数量有限制吗?

HTTP/1.1假如一个网页内嵌很多图片资源,只开一个TCP连接顺序下载,用户等待时间久用户体验不好,每个图片资源都开一个TCP连接服务器撑不住,谷歌只允许对同一Host建立6个TCP连接,详见 six requests,不同的浏览器可能会有差别。

5. 收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?

如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。不过也未必会所有挂在这个域名的资源都会使用一个 TCP 连接去获取,但是可以确定的是 Multiplexing 很可能会被用到。

如果发现用不了 HTTP2 呢?或者用不了 HTTPS(现实中的 HTTP2 都是在 HTTPS 上实现的,所以也就是只能使用 HTTP/1.1)。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?那其他的请求就只能等等了。

借鉴自: 小光

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值