2.7 持久連接配接節省通信量
2.7.1 持久連接配接
為解決上述 TCP 連接配接的問題,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久連接配接(HTTP Persistent Connections,也稱為 HTTP keep-alive 或HTTP connection reuse)的方法。持久連接配接的特點是,隻要任意一端沒有明确提出斷開連接配接,則保持 TCP 連接配接狀态。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwIzX39GZhh2csATMflHLwEzX4xSZz91ZsAzMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1QTN3MjZjFDO3EGM3UGZyYzX5UTOygTM1IzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
圖:持久連接配接旨在建立 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 資訊狀态下的請求
第 2 次以後(存有 Cookie 資訊狀态)的請求
上圖展示了發生 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
個人微信公衆号: