1. 程式人生 > >HTTP 02 HTTP1.1 協議

HTTP 02 HTTP1.1 協議

字段 tcp連接 級別 記錄 保留 即使 對比 .cn 保存

發送請求:

技術分享

返回時, content-type 與 HTTP 正文之間有一個空格

HTTP 是不保存狀態協議, 也就是說在 HTTP 這個級別, 協議對於發送過的請求或相應都不做持久化處理.

但是, 比如用戶登錄到一家購物網站, 即使他跳轉到該站的其他頁面後, 也需要能繼續保持登錄狀態, 針對這個實例, 網站為了能夠掌握是誰送出的請求, 需要保存用戶的狀態. HTTP1.1 雖然是無狀態協議, 但為了實現期望的保持狀態功能, 於是引入了 Cookie 技術.

告知服務器意圖的HTTP方法

GET: 獲取資源

POST: 傳輸實體到服務器

PUT : 傳輸文件到服務器

HEAD: 獲得報文首部, head 方法和 GET 方法一樣, 只是不返回報文主體內容.

DELETE : 刪除文件, 於 PUT 相反

持久連接節省通信量

HTTP 協議的初始版本, 每進行一次HTTP通信就要斷開一次TCP連接.

技術分享

為解決上述 TCP 連接問題, HTTP/1.1 想出了持久連接, 持久連接的特點是, 只要任意一端沒有明確提出斷開連接, 則保持 TCP 連接狀態.

技術分享

持久連接的好處在與減少了TCP連接的重復建立和斷開所造成的額外開銷, 減輕了服務器端的負載.

在 HTTP/1.1 中, 所有的連接默認都是持久連接.

管線化

持久連接使得多數請求以管線化的方式發送成為可能. 從前發送請求後需等待並收到響應, 才能發送下一個請求, 管線化技術出現後, 不用等待響應亦可直接發送下一個請求. 這樣能夠做到同時並行發送多個請求, 而不需要一個接一個的等待響應了.

技術分享

使用 Cookie 的狀態管理

技術分享

保留無狀態協議這個特征的同時又要解決服務器的負擔過重(如果由服務器來管理所有的客戶端信息)的矛盾問題, 引入了 Cookie技術, Cookie技術通過在請求和響應報文中寫入 Cookie信息來控制客戶端狀態.

Cookie 會根據從服務器端發送的響應報文內的一個叫 Set-Cookie的首部字段信息, 通知客戶端保存Cookie, 當下次客戶端再往該服務器發送請求時, 客戶端會自動在請求的報文中加入Cookie值後發送出去.

服務器發現客戶端發送過來的 Cookie後, 會去檢查究竟是哪個客戶端發來的請求, 然後對比服務器上的記錄, 最後得到之前的狀態信息.

技術分享

下邊序號, 對應上圖

技術分享

註意下邊的 set-Cookie: sid

技術分享

再次請求時, 就包含了 Cookie 信息

技術分享

HTTP 02 HTTP1.1 協議