一个 TCP 连接可以发多少个 HTTP 请求呢?
1. 打开网址的过程
- DNS服务器请求解析(检查host文件)
- 建立TCP连接,三次握手
- 发送HTTP请求,请求行、请求头部、空行和请求数据4部分组
- 服务器返回,服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成
- 主动释放or延时释放
- 浏览器进行渲染
2. 问题:
-
现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?
HTTP/1.0中,一个HTTP响应后会断开TCP连接
HTTP/1.1中默认情况下建立 TCP 连接不会断开,只有在请求报头中声明 Connection: close 才会在请求完成后关闭连接。
-
一个 TCP 连接可以对应几个 HTTP 请求?
在维持连接的情况下,一个 TCP 连接是可以发送多个 HTTP 请求的。
-
一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?
HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。
1.1通过维持长连接或者多个连接解决问题。
在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。
-
为什么有的时候刷新页面不需要重新建立 SSL 连接?
TCP 连接有的时候会被浏览器和服务端维持一段时间。TCP 不需要重新建立,SSL 自然也会用之前的。
-
浏览器对同一 Host 建立 TCP 连接到数量有没有限制?
有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。