HTTP

HTTP 知识量:10 - 42 - 186

2.3 通信状态管理><

持久连接- 2.3.1 -

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。但随着技术的发展,现在的HTML页面可能需要包含图片、音频、视频等其他资源,通信的断开会显著增加通信量的开销。

为解决这一问题,HTTP/1.1采用了持久连接,即HTTP keep-alive或HTTP connection reuse的方法。持久连接的特点是只要有任意一端没有明确提出断开连接,则保持TCP连接状态。

在HTTP/1.1中所有的连接默认都是持久连接。

管线化- 2.3.2 -

在持久连接的基础上,管线化可以进一步提高通信效率。以前发送请求后需要等待并收到响应后,才能发送下一个请求。管线化允许不用等待响应就可以直接发送下一个请求。这样就可以同时并行发送多个请求,不必一个接一个的等待响应了。

不保存状态的协议- 2.3.3 -

HTTP是一种不保存状态(无状态)的协议,对于发送过的请求或响应都不做持久化处理。

这样的设计可以减少服务器的CPU及内存的消耗,是为了更快的处理大量事务,确保协议的可伸缩性,特意将HTTP协议设计的如此简单。

使用Cookie管理状态- 2.3.4 -

随着Web的发展,有些业务需要通信保持状态,例如:应用购物网站系统时,不论页面如何跳转,总是需要追踪用户的行为,确保用户保持登录状态。为了实现保持状态的功能,引入了Cookie技术。

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。具体的:

  1. Cookie会在服务器端发送的响应报文内添加名为Set-Cookie的首部字段信息,并通知客户端保存Cookie。

  2. 当客户端再次发送请求时,客户端会自动在请求报文中加入Cookie值再发送。

  3. 服务器端收到请求会通过Cookie值检查究竟是哪一个客户发送的请求,以此实现状态的保持。