2.7 持久连接节省通信量

2.7.1 持久连接

      为解决上述 TCP 连接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或HTTP connection reuse)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

《图解HTTP》读书笔记二:简单的 HTTP 协议_cookie


图:持久连接旨在建立 1 次 TCP 连接后进行多次请求和响应的交互

      持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了。

      在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并未标准化。虽然有一部分服务器通过非标准的手段实现了持久连接,但服务器端不一定能够支持持久连接。毫无疑问,除了服务器端,客户端也需要支持持久连接。

2.7.2 管线化

      持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。

2.8 使用 Cookie 的状态管理

      Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
      Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出
去。
      服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

没有 Cookie 信息状态下的请求

《图解HTTP》读书笔记二:简单的 HTTP 协议_HTTP_02

第 2 次以后(存有 Cookie 信息状态)的请求

《图解HTTP》读书笔记二:简单的 HTTP 协议_HTTP_03


上图展示了发生 Cookie 交互的情景,HTTP 请求报文和响应报文的内容如下。

1、 请求报文(没有 Cookie 信息的状态)

GET /reader/ HTTP/1.1
Host: hackr.jp

2、响应报文(服务器端生成 Cookie 信息)

HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Server: Apache
<Set-Cookie: sid=1342077140226724; path=/; expires=Wed,
10-Oct-12 07:12:20 GMT>
Content-Type: text/plain; charset=UTF-8

3、请求报文(自动发送保存着的 Cookie 信息)

GET /image/
Host: hackr.jp
Cookie: sid=1342077140226724

个人微信公众号:

《图解HTTP》读书笔记二:简单的 HTTP 协议_cookie_04

作者:jiankunking ​