圖解HTTP學習筆記——簡單的HTTP協議
前言
最近在學習Web開發的相關知識,發現《圖解HTTP》這本書通俗易懂。所以花時間學習這本書,并記錄下學習筆記。
如上圖,我們每天都在瀏覽網頁,一般我們都是在瀏覽器地址欄輸入要訪問的網站的地址(如百度),按下回車,瀏覽器就顯示了我們要訪問的網站的網頁。
那么在我們敲下回車鍵的那一刻,究竟發生了什么呢。通過今天的學習,能大致了解其中原理,并簡單學習HTTP協議。
目錄
1.客戶端與服務器端
2.HTTP是不保存狀態的協議
3.請求URI定位資源
4.告知服務器意圖的HTTP方法
5.使用方法下達命令
6.持久連接節省通信量
7.使用Cookie的狀態管理
正文
1.客戶端與服務器端
客戶端:請求訪問資源(文本或圖像)的一端
服務器端:提供資源響應的一端
HTTP協議規定:請求從客戶端發出,最后服務器端響應該請求并返回。(肯定是從客戶端開始建立通信的,服務器端在沒有接收到請求之前不會發送響應)
通俗地說,客戶端就好比男生,服務器端就好比女生,男生追求女生,女生才會有所反應。當然,如果是高富帥,則反之。也就是說,追求者只有主動去追求被追求者,才有可能收獲美滿愛情。(個人理解==,歡迎討論)
下面通過一個訪問百度的具體事例來學習:
使用Chrome的控制臺工具,能很好的理解HTTP請求的過程,同時也是很好的Web開發工具。(OSX:Command+Option+J Windows:F12)

如上圖所示:
在請求報文中:
方法(method):請求訪問服務器的類型,如GET(更多方法參考下面的告知服務器意圖的HTTP方法)
請求URI(request-URI):請求訪問的資源對象
HTTP的版本號:如HTTP/1.1,用來提示客戶端使用的HTTP協議功能
請求報文由: 請求URI、協議版本、可選的請求首部字段 和 內容實體構成的。
響應報文由: 協議版本、狀態碼(表示請求成功或失敗的數字代碼 如200)、用以解釋狀態碼的原因短語(如OK)、可選的響應首部字段以及實體主體構成。
2.HTTP是不保存狀態的協議
HTTP是一種不保存狀態,即無狀態(stateless)協議。即在HTTP這個級別,協議對于發送過的請求或響應都不做持久化處理)
為了更快地處理大量事務,確保協議的可伸縮性===》(將HTTP協議設計成如此簡單)=====》表現:每當有新的請求發送時,就會有對應的新響應產生。(協議本身并不保留之前一切的請求或響應報文的信息)
無狀態====》導致網站無法保存用戶的狀態====》引入Cookie技術
3.請求URI定位資源
HTTP協議使用URI定位互聯網上的資源
4.告知服務器意圖的HTTP方法
GET:獲取資源
POST:傳輸實體主體
PUT:傳輸文件(HTTP/1.1的該方法自身不帶驗證機制,存在安全問題,一般的Web網站不使用該方法)=====》(解決方法:1.配合Web應用程序的驗證機制2.架構設計采用REST標準)
HEAD:獲取報文首部(用于確認URI的有效性及資源更新的日期時間)
DELETE:刪除文件(存在和PUT一樣的問題)
OPTIONS:詢問支持的方法
TRACE:追蹤路徑
CONNECT:要求用隧道協議連接代理(SSL:Secure Sockets Layer安全套接層,TLS:Transport Layer Security傳輸層安全)
5.使用方法下達命令
向請求URI指定的資源發送請求報文時,采用稱為方法的命令。
6.持久連接節省通信量
HTTP協議的初始版本:每進行一次HTTP通信就要斷開一次TCP連接====》每次的請求都會造成無謂的TCP連接建立和斷開,增加通信量的開銷====》解決:在HTTP/1.1和部分HTTP/1.0中:使用了持久連接(HTTP Persistent Connections,也稱為HTTP keep-alive或HTTP connection reuse)的方法(特點:只要任意一端沒有明確提出斷開連接,則保持TCP連接狀態)
好處:減少了TCP連接的重復建立和斷開所造成的額外開銷,減輕服務器端的負載。
持久連接====》管線化(pipelining)技術====》不用等待響應就能直接發送下一個請求===》同時并行發送多個請求
7.使用Cookie的狀態管理
HTTP是無狀態協議(它不對之前發生過的請求和響應的狀態進行管理,即無法根據之前的狀態進行本次的請求處理)=====》對于要求登陸認證的Web頁面無法進行狀態的管理(不記錄已登錄的狀態)=====》要求在每次請求報文中添加參數來管理登錄狀態
無狀態協議優點:1)不保存狀態===》減少服務器的CPU及內存資源的消耗
2)HTTP協議的簡單性=====》被應用到各種場景里
Cookie技術:通過在請求和響應報文中寫入Cookie信息來控制客戶端的狀態
實現原理:服務器端發送的響應報文內有一個叫做Set-Cookie的首部字段信息===》通知客戶端保存Cookie====》下次客戶端再往該服務器發送請求時=====》客戶端會自動在請求報文中加入Cookie值后發送出去====》服務器端發現客戶端發送過來的Cookie===》服務器端會檢查是從哪一個客戶端發來連接請求=====》服務器端對比服務器上的記錄=====》最后得到之前的狀態信息。




















