天天看點

《圖解HTTP》讀書筆記二:簡單的 HTTP 協定

2.7 持久連接配接節省通信量

2.7.1 持久連接配接

      為解決上述 TCP 連接配接的問題,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久連接配接(HTTP Persistent Connections,也稱為 HTTP keep-alive 或HTTP connection reuse)的方法。持久連接配接的特點是,隻要任意一端沒有明确提出斷開連接配接,則保持 TCP 連接配接狀态。

《圖解HTTP》讀書筆記二:簡單的 HTTP 協定

圖:持久連接配接旨在建立 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 協定

第 2 次以後(存有 Cookie 資訊狀态)的請求

《圖解HTTP》讀書筆記二:簡單的 HTTP 協定

上圖展示了發生 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      

個人微信公衆号:

繼續閱讀