HTTP圖解讀書筆記(第二章 簡單的HTTP協議)
一、HTTP協議用於客戶端和服務端的通訊
二、通過請求和響應的交換完成通訊
請求報文由請求方法、請求URL、協議版本、可選的請求首部欄位和內容實體組成
響應報文放由協議版本、狀態碼、用於解釋狀態碼原因的短語、可選的響應首部欄位和實體主體組成
三、HTTP協議是不儲存狀態的協議
使用 HTTP 協議,每當有新的請求傳送時,就會有對應的新響應產生。協議本身並不保留之前一切的請求或響應報文的資訊。
無狀態導致一些問題,比如:不能儲存登入狀態。為了實現期望的儲存狀態的功能,引入了cookie
四、請求URI定位資源
HTTP 協議使用 URI 定位網際網路上的資源。正是因為 URI 的特定功能,在網際網路上任意位置的資源都能訪問到。
五、告知伺服器意圖的HTTP方法
GET:獲取資源
POST:傳輸實體主體
雖然用get方法也可以傳輸實體主體,但一般不用get方法傳輸。post的主要目的不是獲取響應的主體內容
PUT:傳輸檔案
PUT 方法用來傳輸檔案。就像 FTP 協議的檔案上傳一樣,要求在請求報文的主體中包含檔案內容,然後儲存到請求 URI 指定的位置。但是,鑑於 HTTP/1.1 的 PUT 方法自身不帶驗證機制,任何人都可以上傳檔案 , 存在安全性問題,因此一般的 Web 網站不使用該方法。
HEAD:獲得報文首部
HEAD 方法和 GET 方法一樣,只是不返回報文主體部分。用於確認URI 的有效性及資源更新的日期時間等。
DELETE:刪除檔案
DELETE 方法用來刪除檔案,是與 PUT 相反的方法。DELETE 方法按請求 URI 刪除指定的資源。但是,HTTP/1.1 的 DELETE 方法本身和 PUT 方法一樣不帶驗證機制,所以一般的 Web 網站也不使用 DELETE 方法。
OPTIONS:詢問支援的方法
用來查詢針對請求 URI 指定的資源支援的方法
TRACE:追蹤路徑
CONNECT:要求用隧道協議連線代理
CONNECT 方法要求在與代理伺服器通訊時建立隧道,實現用隧道協議進行 TCP 通訊。主要使用 SSL(Secure Sockets Layer,安全套接層)和 TLS(Transport Layer Security,傳輸層安全)協議把通訊內容加密後經網路隧道傳輸
六、持久連線節省通訊量
HTTP初始版本中每次沒進行一次HTTP通訊就要斷開一次TCP連線,但是如果每次請求一個HTML頁面時還要請求頁面中的圖片等資源,這樣就要多次的TCP連線和斷開,增加通訊的開銷。為了解決這個問題,引入持久連線(HTTP keep-alive)。
永續性連線:一次TCP連線可以進行多次的請求和響應
管線化:持久連線使管線化成為可能。以前傳送請求後需要收到響應後才能發起下一個請求,管線化可以不等收到響應就繼續傳送下一個請求。
七、使用cookie的狀態管理
Cookie 會根據從伺服器端傳送的響應報文內的一個叫做 Set-Cookie 的首部欄位資訊,通知客戶端儲存 Cookie。當下次客戶端再往該伺服器傳送請求時,客戶端會自動在請求報文中加入 Cookie 值後傳送出去。
伺服器端發現客戶端傳送過來的 Cookie 後,會去檢查究竟是從哪一個客戶端發來的連線請求,然後對比伺服器上的記錄,最後得到之前的狀態資訊。