Http协议头与Keep-Alive

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_1290259791/article/details/81990533

Keep-Alive模式

HTTP协议采用请求-应答模式

  • 非KeepAlive模式:每个请求客户端和服务器都要新建一个连接,完成后立即断开连接(HTTP协议是无连接的协议)。
  • KeepAlive模式:使客户端到服务器的连接持续有效,当出现对服务器的后继请求时,Keep-Alive避免了从新建立连接。

Keep-Alive的应用

  • Keep-Alive: timeout=5, max=100
  • timeout=5表示这个TCP通道可以保持5秒
  • max=100,表示这个长连接最多接收100次请求就断开。

Http1.0和Http1.1中

  • Http1.0:默认Keep-Alive时关闭的,需要在Header头中添加Connection: Keep-Alive启用。
  • Http1.1:默认启用Keep-Alive,加入Connection: close才关闭。

目前大部分浏览器都是Http1.1协议,默认发起Keep-Alive连接请求。


如何获知数据传输结束

非Keep-Alive模式

客户端发送一个请求,服务器响应请求,服务器在返回手机的时候关闭连接。客户端读取数据会返回EOF(结尾),知道数据读取完了。

Keep-Alive模式

静态响应数据

通过判断响应头中的Content-Length字段,判断数据达到大小就知道数据传输结束。

动态数据

数据时动态的就不能来判断长度。通常情况服务器时分块传输数据的Transfer-Encoding:chunk,这是就要根据传输的数据块chunk来判断,数据传输结束的时候,最后一个数据库chunk长度是0。

注意

为了兼容HTTP1.0,HTTP1.1消息请求体中必须包含Content-Length头字段。
如果Content-Length字段没有给定,服务器返回400。
如果COntent-Length不合法,服务器返回401

HTTP1.1必须接受Transfer-Encoding:chunk传输编码,因此当不能事先知道消息长度,必须使用该机制来传输消息。如果一个消息同时包含Transfer-Encoding:chunkContent-Length,则忽略Content-Length


短连接和长连接

短连接

短连接:保持在数据传输过程,请求发起,连接建立,数据返回,连接关闭。适用于实时请求数据。

长连接

长连接:客户端在连接发起后,在请求关闭连接前客户端和服务器都保持连接,保持这个通信管道,之后就可以进行复用。
适用于消息推送、请求频繁的场景直播。建立连接后,该连接下所有请求都可以重用这个长连接管道,避免频繁连接请求,提升了效率。

长连接的建立

  1. 建立HTTP长连接,HTTP请求头包含如下内容:Connection:Keep-Alive
  2. 服务端同意建立长连接,HTTP响应头包含如下内容:Connection:Keep-Alive
  3. 关闭连接时,HTTP头包含:Connection:Close

猜你喜欢

转载自blog.csdn.net/qq_1290259791/article/details/81990533
今日推荐