如何理解HTTP协议的“无连接”特点

无连接的含义:限制每次连接只处理一个请求。
服务器处理完客户请求,并收到客户的应答后,立即断开连接。采用这种方式可以节省传输时间。

为什么要采用无连接?

因为同一个服务器需要同时处理大量客户端的网页请求,但是每个客户端与服务器的数据交换具有突发性瞬时性,两次数据传输的关联性很低,因此将http协议涉及为请求时建立连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。

为什么要采用长连接?

早期 HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无畏的 TCP 连接建立和断开,增加了通信开销。

为了解决上述 TCP 连接问题,HTTP/1.1 提出了长连接的通信方式,也叫持久连接。这种方式的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。
持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

为什么HTTP/1.1默认使用长连接?

默认使用HTTP/1.1协议,会在响应头加入这行代码: Connection:keep-alive

随着网页越来越复杂,可能嵌入了很多图片,每次访问图片都需要建立一次TCP连接就很低效。因此,长连接用来解决效率低的问题。

对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive 功能对资源利用的影响尤其突出。
  这样一来,客户端和服务器之间的 HTTP 连接就会被保持,不会断开(超过 Keep-Alive 规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。

image.png