轉自 https://segmentfault.com/a/1190000015316332
一、HTTP/1.x
Http1.x
- 缺陷:線程阻塞,在同一時間,同一域名的請求有一定數量限制,超過限制數目的請求會被阻塞
http1.0
- 缺陷:瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都需要與服務器建立一個TCP連接(TCP連接的新建成本很高,因為需要客戶端和服務器三次握手),服務器完成請求處理后立即斷開TCP連接,服務器不跟蹤每個客戶也不記錄過去的請求;
-
解決方案:
- 添加頭信息——非標准的Connection字段
Connection: keep-alive
- 添加頭信息——非標准的Connection字段
http1.1:
- 改進點:
-
持久連接
- 引入了持久連接,即TCP連接默認不關閉,可以被多個請求復用,不用聲明
Connection: keep-alive(對於同一個域名,大多數瀏覽器允許同時建立6個持久連接)
- 引入了持久連接,即TCP連接默認不關閉,可以被多個請求復用,不用聲明
-
管道機制
- 即在同一個TCP連接里面,客戶端可以同時發送多個請求。
-
分塊傳輸編碼
- 即服務端沒產生一塊數據,就發送一塊,采用”流模式”而取代”緩存模式”。
-
新增請求方式
- PUT:請求服務器存儲一個資源;
- DELETE:請求服務器刪除標識的資源;
- OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求;
- TRACE:請求服務器回送收到的請求信息,主要用於測試或診斷;
- CONNECT:保留將來使用
-
缺點:
- 雖然允許復用TCP連接,但是同一個TCP連接里面,所有的數據通信是按次序進行的。服務器只有處理完一個請求,才會接着處理下一個請求。如果前面的處理特別慢,后面就會有許多請求排隊等着。這將導致“隊頭堵塞”
- 避免方式:一是減少請求數,二是同時多開持久連接
二、HTTP/2.0
-
特點:
- 采用二進制格式而非文本格式;
- 完全多路復用,而非有序並阻塞的、只需一個連接即可實現並行;
- 使用報頭壓縮,降低開銷
- 服務器推送
1. 二進制協議
- HTTP/1.1 版的頭信息肯定是文本(ASCII編碼),數據體可以是文本,也可以是二進制。HTTP/2 則是一個徹底的二進制協議,頭信息和數據體都是二進制,並且統稱為”幀”:頭信息幀和數據幀。
- 二進制協議解析起來更高效、“線上”更緊湊,更重要的是錯誤更少。
2. 完全多路復用
- HTTP/2 復用TCP連接,在一個連接里,客戶端和瀏覽器都可以同時發送多個請求或回應,而且不用按照順序一一對應,這樣就避免了”隊頭堵塞”。
3. 報頭壓縮
- HTTP 協議是沒有狀態,導致每次請求都必須附上所有信息。所以,請求的很多頭字段都是重復的,比如Cookie,一樣的內容每次請求都必須附帶,這會浪費很多帶寬,也影響速度。
- 對於相同的頭部,不必再通過請求發送,只需發送一次;
- HTTP/2 對這一點做了優化,引入了頭信息壓縮機制;
- 一方面,頭信息使用gzip或compress壓縮后再發送;
- 另一方面,客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,產生一個索引號,之后就不發送同樣字段了,只需發送索引號。
4. 服務器推送
- HTTP/2 允許服務器未經請求,主動向客戶端發送資源;
- 通過推送那些服務器任務客戶端將會需要的內容到客戶端的緩存中,避免往返的延遲
三、HTTPS
- HTTP協議通常承載於TCP協議之上,在HTTP和TCP之間添加一個安全協議層(SSL或TSL),這個時候,就成了我們常說的HTTPS.
1、HTTPS主要作用
- (1)對數據進行加密,並建立一個信息安全通道,來保證傳輸過程中的數據安全; - (2)對網站服務器進行真實身份認證。
2、HTTPS和HTTP的區別
- 1、HTTPS是加密傳輸協議,HTTP是名文傳輸協議; - 2、HTTPS需要用到SSL證書,而HTTP不用; - 3、HTTPS比HTTP更加安全,對搜索引擎更友好,利於SEO, - 4、 HTTPS標准端口443,HTTP標准端口80; - 5、 HTTPS基於傳輸層,HTTP基於應用層;
3、HTTPS和HTTP的工作過程區別
-
HTTP 包含動作:
- 瀏覽器打開一個 TCP 連接
- 瀏覽器發送 HTTP 請求到服務器端
- 服務器發送 HTTP 回應信息到瀏覽器
- TCP 連接關閉
-
SSL 包含動作:
- 驗證服務器端
- 客戶端和服務器端選擇加密算法和密碼,確保雙方都支持
- 驗證客戶端(可選)
- 使用公鑰加密技術來生成共享加密數據
- 創建一個加密的 SSL 連接
- 基於該 SSL 連接傳遞 HTTP 請求
3、HTTPS加密方式
- 對稱加密:加密和解密都是使用的同一個密鑰;
-
非對稱加密:
- 加密使用的密鑰和解密使用的密鑰是不相同的,分別稱為:公鑰、私鑰;
- 公鑰和算法都是公開的,私鑰是保密的。
- 非對稱加密過程:
- 服務端生成配對的公鑰和私鑰
- 私鑰保存在服務端,公鑰發送給客戶端
- 客戶端使用公鑰加密明文傳輸給服務端
- 服務端使用私鑰解密密文得到明文
- 數字簽名:簽名就是在信息的后面再加上一段內容,可以證明信息沒有被修改過。
