精讀《圖解HTTP》

程式設計師解決師發表於2018-06-27

前言

作為一個前端,如果能夠深刻理解 HTTP 通訊,能夠讓我們在日常開發工作中快速定位問題。所以我十分建議大家去讀一下《圖解HTTP》和《HTTP權威指南》。權威指南講解的十分詳細,內容也十分的全面,但是這本書的厚度也讓很多同學望而卻步。推薦大家從 《圖解HTTP》 這本書開始學習,這本書雖然沒有權威指南詳細,但涵蓋了很多我們日常開發需要的知識點,理解他,能讓我們的開發效率事半功倍。

《圖解HTTP》這本書對網際網路基盤—— HTTP 協議進行了全面系統的介紹。作者從 HTTP 發展史開始,嚴謹地剖析了 HTTP 協議的結構,列舉很多常見通訊場景及實戰案例,最後延伸到Web安全、最新技術動向等方面。通過書中大量生動形象的通訊圖例,我們能夠更全面地理解 HTTP 通訊過程中客戶端與伺服器之間的互動情況。在讀這本書的過程中我收穫頗多,並用思維導圖的方式記錄下來,方便自己後期溫故。如果你剛好沒有讀過,可以當做度這本書的預習閱讀,相信你也會有所收穫(思維導圖圖片可能有點小,記得點開看)

瞭解 HTTP 協議訪問 Web

精讀《圖解HTTP》

這一章介紹了 Web 及網路協議的基礎,http 通訊被拆分成四層,應用層,傳輸層,網路層和鏈路層,每層只要考慮分派給自己的任務,不需要弄清整個協議鏈路的細節。應用層使我們肉眼能看見的,我們常用的 http 協議和 FTP 協議就處在這一層,往下就是傳輸層,TCP/IP 協議工作的地方(我們的IP是IP地址,和這裡的IP 協議有做區分),再往下是網路層,傳輸層建立連線之後,網路層負責將資料包的傳輸(資料包是網路傳輸的最小單位)。最後是鏈路層,用來連線網路配件的部分,舉個例子就是我們常說的網路卡啊,光纖啊。在一個完整的資料傳輸中,客戶端會按照應用層,傳輸層,網路層,鏈路層的順序進行進行處理,每一層都會加一個首部,伺服器端在接收的時候按照鏈路層,網路層,傳輸層,應用層的順序去移除首部。

我們常說的3次握手就是 TCP 協議採用的策略,為了傳輸方便,TCP 將大資料分割成以報文為單位的資料包,IP 協議負責把資料包傳送出去。在傳送的過程中常常需要經過多個路由器的中轉,這個時候會運用 ARP 協議來查詢下一個路由器的地址。

通常使用者的習慣會去訪問域名而不是IP地址,將域名解析成對應的 IP 就需要用到 DNS 協議域名解析的服務。

簡單的 HTTP 協議

精讀《圖解HTTP》

日常開發中我們感知不到 http 協議的底層實現,我們所瞭解的 HTTP 協議總是由客戶端發起,服務端接收。我們關注到的請求,常常是請求的URI,協議版本,頭部資訊,及內容實體,我們常使用的響應資訊則包括了響應狀態,響應內容。

我們常常會使用不通的 http 方法來執行不同的操作。我們常使用 GET 來獲取資源,使用 POST 傳輸實體主題,使用 PUT 傳輸檔案,使用 DELETE 刪除檔案,使用 OPTIONS 詢問支援的方法(常常在跨域的場景中使用),使用TRACE 獲取訪問路徑,使用 CONNECT 用隧道協議連結代理。

http 協議是一種無狀態協議,不會去記錄上一次訪問狀態,這使得當我們要做類似於登入這樣的公能的時候,需要通過 cookie 來進行狀態的管理。

HTTP 報文內的 HTTP 資訊

精讀《圖解HTTP》

精讀《圖解HTTP》
通常HTTP報文(用於HTTP協議互動的資訊)的結構包括,請求行,狀態行,首部欄位等,從 HTTP 的報文中,我們可以獲得很多資訊。在 MIME 擴充套件中會使用一種稱為多部分物件集合的方法,來容納多份不同的資料型別, 在 HTTP 報文中使用多部分物件時,需要在首部欄位上加上 Content-type 。

通過設定首部欄位,來達到獲取部分內容範圍請求(請求資源中斷後,不需要重新開始請求),將傳輸內容編碼的目的,來提高載入效率。

有的時候不同的場景需要我們獲取不同的內容,就比如頁面的中英文切換的功能,在HTTP請求中,我們通過設定 accept 類的請求頭欄位實現,也就是內容協商的方式,返回最合適的內容。協商方式分為,伺服器驅動協商,客戶端驅動協商,透明協商。

返回結果的 HTTP 狀態

精讀《圖解HTTP》

在HTTP通訊中,通過轉態碼,告知客戶端的請求狀態。狀態碼大致可以被分為 5 大類,1xx 表示接受的請求正在處理,2xx 表示請求正常處理完畢,3xx 表示需要進行附加操作以完成請求,4xx 表示客戶端無法處理請求,5xx 表示伺服器處理出錯。

在這5大類請求中,我們常用的十幾種狀態碼,需要我們重點去掌握,詳細介紹看?的思維導圖。

與 HTTP 協作的 Web 伺服器

精讀《圖解HTTP》

通過使用虛擬機器,可以實現單臺主機多個域名的站點部署。在實際通訊中,我們常常使用,代理,閘道器,隧道協助請求轉發,安全通訊。

為了提高網站效能,我們會使用快取方式來提高站點請求速率,通常是通過設定代理伺服器快取和客戶端快取來實現。需要注意的是,快取都會設定一個過期時間,站點內容更新時,快取內容也需要及時更新。

HTTP 頭部

精讀《圖解HTTP》

精讀《圖解HTTP》

精讀《圖解HTTP》

在請求中,HTTP 報文由請求方法,URI,HTTP版本,HTTP 首部欄位等部分構成。在響應中,HTTP 的報文有 HTTP 版本,狀態碼,HTTP首部欄位3部分構成。首部資訊尤為重要,我們可以通過首部欄位的設定來傳遞請求資訊,類比於快取控制,報文建立時間,是否壓縮編碼,是否支援跨域等。

確保 Web 安全的 HTTPS

精讀《圖解HTTP》
HTTP 簡單靈活的設定也造就了他的缺點。1. 通訊使用明文,內容可能被竊聽。2、不驗證通訊方省份,因此有可能會遭遇偽裝。3、無法證明報文的完整性,所有有可能被篡改。HTTPS 其實也不算是一個全新的協議,HTTPS = HTTP + 加密 + 認證 + 完整性保護。HTTPS 完善了 HTTP 的相關缺點,在 HTTP 的部分通訊介面採用 SSL 和 TLS 協議替代,使用了數字證照認證機構和其他相關機關頒發的公開祕鑰證照

何為認證

精讀《圖解HTTP》

精讀《圖解HTTP》
HTTP 的認證方式通常是 BASIC認證(基本認證),DIGEST認證(摘要認證),SSL 客戶端認證,FormBase 認證(基於表單認證)。BASIC 認證和 DIGEST 認證通過首部欄位 Authorization 確認認證資訊,SSL 藉由 HTTPS 客戶端證照完成認證方式。 表單認證則是依賴於 cookie 儲存使用者的登入狀態。

基於 HTTP 的功能追加協議

精讀《圖解HTTP》

SPDY 在TCP/IP 的應用層與運輸層之間通過新加會話層的形式運作,使用 SPDY 使得 HTTP 協議的功能得到了擴充套件,實現了多路複用流,賦予請求優先順序,壓縮 HTTP 首部,推送功能,伺服器提醒功能。

使用 WebSocket 進行全雙工通訊,只要建立了連結,客戶端和伺服器都能都主動得向對方傳送資訊。和 HTTP 相比,減少了每次建立連線的開銷,減少了通訊首部資訊。

HTTP/2.0 改善了使用 web 時的速度體驗。

構建 Web 內容的技術

精讀《圖解HTTP》

web 應用開發語言的三劍客,HTML,CSS,javascript 。書出版的有點久所以書中沒有提到,現在火爆的 web 構建技術,Vue,React 等流行前端框架。XML,JSON 資料釋出語言,其中 JSON 比較常用,日常開發都離不了他。

web 的攻擊技術

精讀《圖解HTTP》

精讀《圖解HTTP》

精讀《圖解HTTP》
在 Web 應用中,從瀏覽器那接收到的 HTTP 請求的全部內容,都可以在客戶端自由的變更、篡改,在HTTP請求報文中載入攻擊程式碼,就能發起對 Web 應用的攻擊。Web 應用的攻擊模式主要是主動攻擊和被動攻擊。

常見的攻擊方式有,跨站指令碼攻擊,SQL 注入攻擊,HTTP 首部注入攻擊。這些攻擊造成的影響見?思維導圖。通常簡單的 HTTP 協議本身不會存在安全性的問題,協議本身也不會成為攻擊物件,黑客利用的常常是因為設計和設定上的缺陷,會話管理疏忽等引發的安全漏洞進行攻擊。

?往期的讀書筆記

《圖解HTTP》這本書讀完啦,下一期我們來讀讀《HTTP權威指南》,我在 github 建了倉庫放這些思維導圖的原件,如果覺得圖片不清晰,同學們可以去 github 上下載查閱。如果你也喜歡用思維導圖的方式來記錄讀書筆記,也歡迎和我一同維護這個倉庫,歡迎留言或則微信(646321933)與我交流

精讀《你不知道的 javascript(上卷)》

精讀《你不知道的javascript》中卷

精讀《深入淺出Node.js》

javascript 垃圾回收演算法

思維導圖下載地址

《圖解HTTP》 PDF下載地址

相關文章