关于TCP协议中的HTTP一些问题

1。浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?

在HTTP/1.0中,一个服务器在发送完一个HTTP响应后,会断开TCP链接。但是每次请求重新建立和断开TCP连接,代价过大。所以某些服务器对Connection:keep-alive的Header进行了支持。
在HTTP/1.1中,就把Connection头写进了标准,并且默认开启持久支持。除非请求中写明了Connection:close否则浏览器和服务器之间是会持续一段时间的TCP连接,不会一个请求就结束

2。一个 TCP 连接可以对应几个 HTTP 请求?

一个TCP连接如果持续连接可以发送多个HTTP请求

3。一个 TCP 连接中 HTTP 请求发送可以一起发送么?

HTTP/1.1存在一个问题:两个请求的生命周期不能重叠,任意两个HTTP请求从开始到结束的时间在同一个TCP连接里不能重叠。HTTP/1.1中规定了Pipelining试图解决此问题,但是浏览器中默认关闭。(因为作为文本传输协议浏览器要分别不同文件的传输内容,程序设计会很复杂,同时资源消耗比较大)
    HTTP2中Multiplexing存在,多个HTTP请求可以在同一个TCP连接中并行进行。
    HTTP/1.1解决页面加载效率的方式:
1.    维持和服务器已经建立的TCP连接,在同一连接顺序上处理多个请求
2.    和服务器建立多个TCP连接

4。为什么有的时候刷新页面不需要重新建立 SSL 连接?

TCP 连接有的时候会被浏览器和服务端维持一段时间。TCP 不需要重新建立,SSL 自然也会用之前的。

5。浏览器对同一 Host 建立 TCP 连接到数量有没有限制?

理论上可以无限多,但现实是会根据浏览器的设置自行设置。


   转载规则


《关于TCP协议中的HTTP一些问题》 Evolyutsiya 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录