做爲一個前端,若是可以深入理解 HTTP 通訊,可以讓咱們在平常開發工做中快速定位問題。因此我十分建議你們去讀一下《圖解HTTP》和《HTTP權威指南》。權威指南講解的十分詳細,內容也十分的全面,可是這本書的厚度也讓不少同窗望而卻步。推薦你們從 《圖解HTTP》 這本書開始學習,這本書雖然沒有權威指南詳細,但涵蓋了不少咱們平常開發須要的知識點,理解他,能讓咱們的開發效率事半功倍。javascript
《圖解HTTP》這本書對互聯網基盤—— HTTP 協議進行了全面系統的介紹。做者從 HTTP 發展史開始,嚴謹地剖析了 HTTP 協議的結構,列舉不少常見通訊場景及實戰案例,最後延伸到Web安全、最新技術動向等方面。經過書中大量生動形象的通訊圖例,咱們可以更全面地理解 HTTP 通訊過程當中客戶端與服務器之間的交互狀況。在讀這本書的過程當中我收穫頗多,並用思惟導圖的方式記錄下來,方便本身後期溫故。若是你恰好沒有讀過,能夠當作度這本書的預習閱讀,相信你也會有所收穫(思惟導圖圖片可能有點小,記得點開看)前端
這一章介紹了 Web 及網絡協議的基礎,http 通信被拆分紅四層,應用層,傳輸層,網絡層和鏈路層,每層只要考慮分派給本身的任務,不須要弄清整個協議鏈路的細節。應用層使咱們肉眼能看見的,咱們經常使用的 http 協議和 FTP 協議就處在這一層,往下就是傳輸層,TCP/IP 協議工做的地方(咱們的IP是IP地址,和這裏的IP 協議有作區分),再往下是網絡層,傳輸層創建鏈接以後,網絡層負責將數據包的傳輸(數據包是網絡傳輸的最小單位)。最後是鏈路層,用來鏈接網絡配件的部分,舉個栗子就是咱們常說的網卡啊,光纖啊。在一個完整的數據傳輸中,客戶端會按照應用層,傳輸層,網絡層,鏈路層的順序進行進行處理,每一層都會加一個首部,服務器端在接收的時候按照鏈路層,網路層,傳輸層,應用層的順序去移除首部。java
咱們常說的3次握手就是 TCP 協議採用的策略,爲了傳輸方便,TCP 將大數據分割成以報文爲單位的數據包,IP 協議負責把數據包發送出去。在發送的過程當中經常須要通過多個路由器的中轉,這個時候會運用 ARP 協議來查找下一個路由器的地址。git
一般用戶的習慣會去訪問域名而不是IP地址,將域名解析成對應的 IP 就須要用到 DNS 協議域名解析的服務。github
平常開發中咱們感知不到 http 協議的底層實現,咱們所瞭解的 HTTP 協議老是由客戶端發起,服務端接收。咱們關注到的請求,經常是請求的URI,協議版本,頭部信息,及內容實體,咱們常使用的響應信息則包括了響應狀態,響應內容。web
咱們經常會使用不通的 http 方法來執行不一樣的操做。咱們常使用 GET 來獲取資源,使用 POST 傳輸實體主題,使用 PUT 傳輸文件,使用 DELETE 刪除文件,使用 OPTIONS 詢問支持的方法(經常在跨域的場景中使用),使用TRACE 獲取訪問路徑,使用 CONNECT 用隧道協議連接代理。算法
http 協議是一種無狀態協議,不會去記錄上一次訪問狀態,這使得當咱們要作相似於登陸這樣的公能的時候,須要經過 cookie 來進行狀態的管理。跨域
一般HTTP報文(用於HTTP協議交互的信息)的結構包括,請求行,狀態行,首部字段等,從 HTTP 的報文中,咱們能夠得到不少信息。在 MIME 擴展中會使用一種稱爲多部分對象集合的方法,來容納多份不一樣的數據類型, 在 HTTP 報文中使用多部分對象時,須要在首部字段上加上 Content-type 。瀏覽器
經過設置首部字段,來達到獲取部份內容範圍請求(請求資源中斷後,不須要從新開始請求),將傳輸內容編碼的目的,來提升加載效率。緩存
有的時候不一樣的場景須要咱們獲取不一樣的內容,就好比頁面的中英文切換的功能,在HTTP請求中,咱們經過設置 accept 類的請求頭字段實現,也就是內容協商的方式,返回最合適的內容。協商方式分爲,服務器驅動協商,客戶端驅動協商,透明協商。
在HTTP通信中,經過轉態碼,告知客戶端的請求狀態。狀態碼大體能夠被分爲 5 大類,1xx 表示接受的請求正在處理,2xx 表示請求正常處理完畢,3xx 表示須要進行附加操做以完成請求,4xx 表示客戶端沒法處理請求,5xx 表示服務器處理出錯。
在這5大類請求中,咱們經常使用的十幾種狀態碼,須要咱們重點去掌握,詳細介紹看👆的思惟導圖。
經過使用虛擬機,能夠實現單臺主機多個域名的站點部署。在實際通信中,咱們經常使用,代理,網關,隧道協助請求轉發,安全通訊。
爲了提升網站性能,咱們會使用緩存方式來提升站點請求速率,一般是經過設置代理服務器緩存和客戶端緩存來實現。須要注意的是,緩存都會設置一個過時時間,站點內容更新時,緩存內容也須要及時更新。
在請求中,HTTP 報文由請求方法,URI,HTTP版本,HTTP 首部字段等部分構成。在響應中,HTTP 的報文有 HTTP 版本,狀態碼,HTTP首部字段3部分構成。首部信息尤其重要,咱們能夠經過首部字段的設置來傳遞請求信息,類比於緩存控制,報文建立時間,是否壓縮編碼,是否支持跨域等。
HTTP 簡單靈活的設置也造就了他的缺點。1. 通訊使用明文,內容可能被竊聽。二、不驗證通信方省份,所以有可能會遭遇假裝。三、沒法證實報文的完整性,全部有可能被篡改。HTTPS 其實也不算是一個全新的協議,HTTPS = HTTP + 加密 + 認證 + 完整性保護。HTTPS 完善了 HTTP 的相關缺點,在 HTTP 的部分通訊接口採用 SSL 和 TLS 協議替代,使用了數字證書認證機構和其餘相關機關頒發的公開祕鑰證書
HTTP 的認證方式一般是 BASIC認證(基本認證),DIGEST認證(摘要認證),SSL 客戶端認證,FormBase 認證(基於表單認證)。BASIC 認證和 DIGEST 認證經過首部字段 Authorization 確認認證信息,SSL 藉由 HTTPS 客戶端證書完成認證方式。 表單認證則是依賴於 cookie 保存用戶的登陸狀態。
SPDY 在TCP/IP 的應用層與運輸層之間經過新加會話層的形式運做,使用 SPDY 使得 HTTP 協議的功能獲得了擴展,實現了多路複用流,賦予請求優先級,壓縮 HTTP 首部,推送功能,服務器提醒功能。
使用 WebSocket 進行全雙工通訊,只要創建了連接,客戶端和服務器都能都主動得向對方發送信息。和 HTTP 相比,減小了每次創建鏈接的開銷,減小了通訊首部信息。
HTTP/2.0 改善了使用 web 時的速度體驗。
web 應用開發語言的三劍客,HTML,CSS,javascript 。書出版的有點久因此書中沒有提到,如今火爆的 web 構建技術,Vue,React 等流行前端框架。XML,JSON 數據發佈語言,其中 JSON 比較經常使用,平常開發都離不了他。
在 Web 應用中,從瀏覽器那接收到的 HTTP 請求的所有內容,均可以在客戶端自由的變動、篡改,在HTTP請求報文中加載攻擊代碼,就能發起對 Web 應用的攻擊。Web 應用的攻擊模式主要是主動攻擊和被動攻擊。
常見的攻擊方式有,跨站腳本攻擊,SQL 注入攻擊,HTTP 首部注入攻擊。這些攻擊形成的影響見👆思惟導圖。一般簡單的 HTTP 協議自己不會存在安全性的問題,協議自己也不會成爲攻擊對象,黑客利用的經常是由於設計和設置上的缺陷,會話管理疏忽等引起的安全漏洞進行攻擊。
《圖解HTTP》這本書讀完啦,下一期咱們來讀讀《HTTP權威指南》,我在 github 建了倉庫放這些思惟導圖的原件,若是以爲圖片不清晰,同窗們能夠去 github 上下載查閱。若是你也喜歡用思惟導圖的方式來記錄讀書筆記,也歡迎和我一同維護這個倉庫,歡迎留言或則微信(646321933)與我交流