http1.1版本之前 許多瀏覽器和服務器擴展了持久連接
使用 Connection:Keep-Alive 的首部來操作 tcp 的持久連接
實現HTTP/1.0 keep-alive連接的客戶端可以通過包含Connection: Keep-Alive首部請求將一條連接保持在打開狀態。如果服務器愿意為下一條請求將連接保持在打開狀態,就在響應中包含相同的首部(參見圖4-14)。如果響應中沒有Connection: Keep-Alive首部,客戶端就認為服務器不支持keep-alive,會在發回響應報文之后關閉連接。
Keep-Alive 選項
當使用Connection: Keep-Alive 首部時,可以附加一個 Keep-Alive首部來調節 keep-alive 的行為
timeout max 都是響應首部發出的 分別表示 服務器希望將連接保持在活躍狀態的時間和服務器希望為多少個事務保持此連接的活躍狀態,它們都是一個估計值并不是一個承諾值。
此外還可以添加任意未經處理的形如 name[=value]的屬性 主要用于診斷和調試
Connection: Keep-Alive
Keep-Alive: max=5, timeout=120
上面的例子表示服務器最多還會為另外5個事務保持連接的活躍狀態或者將空閑狀態的活躍連接保持兩分鐘
Keep-Alive連接的限制和規則
1. http/1.0 中keep-alive不是默認使用的 客戶端必須發送一個帶有 Connection:Keep-Alive 的請求首部的請求來激活 keep-alive 連接
2. Connection:Keep-Alive 首部必須跟隨所有希望保持持久連接的報文一起發送:
如果客戶端沒有發送Connection:Keep-Alive 服務器將會在請求之后關閉連接
如何客戶端發現在響應中沒有Connection:Keep-Alive首部,則可以知道服務器在發出響應之后會關閉連接
3. 保持持久連接報文實體必須要有正確Content-Length,這樣事務處理才能正確的檢測出一條報文的結束和另一條報文的結束。
4. 代理和網關必須執行Connection首部的規則。代理或網關必須在將報文轉發出去或將其高速緩存之前,刪除在Connection首部中命名的所有首部字段以及Connection首部自身。嚴格來說,不應該與無法確定是否支持Con-nection首部的代理服務器建立keep-alive連接,以防止出現啞代理問題。