Skip to content

TCP和HTTP请求之间有什么关系?

Posted on:2024年8月10日 at 17:06

我们知道开启一个TCP链接之后,HTTP请求就会并行发出。 首先我们来思考一个问题,浏览器与服务器建立一个TCP链接之后,会不会在完成一个HTTP请求后立马断开?

一般情况下,复用的 TCP连接在等待设置的超时时间之后还没有被任何连接使用的话,就会主动断开

一个TCP链接可以对应多少个HTTP请求?

一个TCP链接可以对应多个HTTP请求,只要这个TCP链接没有断开,就可以发送HTTP请求。

这些HTTP请求可以同时发送,同时响应么,在一个TCP链接中?比如:三个HTTP请求同时发送,同时接收响应。

在HTTP/1.1中,单个TCP链接在同一时刻只能处理一个请求,意思就是:任意两个 HTTP 请求从开始到结束的时间在同一个 TCP链接里不能重叠。HTTP/1.1 规范中规定了 Pipelining 来试图解决这个问题, 但是浏览器默认关闭了这个功能。

原因:

HTTP/2.0 提供了Multiplexing 多路传输(多路复用)。可以在一个TCP链接中同时发起多个HTTP请求,同时响应多个HTTP请求。

所以,解决办法也就出现了:

浏览器http请求的并发性是如何体现的?并发请求的数量有没有限制?

有人会说,我们客户端发起HTTP请求明明是异步,并行发送的。怎么到你这里就一个一个发送,一个一个响应了?

其实浏览器会同时与服务器建立多个TCP链接,来支持多个HTTP同时请求的。

就例如:Chrome浏览器最多允许对同一个域名Host建立6个TCP连接,不同的浏览器有所区别。

补充

关于HTTPS如果图片都是HTTPS的连接,并且在同一域名下,浏览器会先和服务器协商使用HTTP2Multiplexing功能进行多路传输,不过未必所有的挂在这个域名下的资源都会使用同一个TCP连接。如果用不了HTTPS或者HTTP2(HTTP2是在HTTPS上实现的),那么浏览器会就在同一个host建立多个TCP连接,每一个TCP连接进行顺序请求资源。

原文转自:https://fe.ecool.fun/topic/7e8ffb4e-8433-46cc-b45b-d8733a9c4833