不少站長可能到如今都沒有理解 HTTP/1.x、HTTP/2 和 HTTPS 之間的區別和關係吧?說實話,明月也是「只知其一;不知其二」的水準而已,今天看到了這篇文章感受總結還算是比較全面,特此分享出來給你們就當是科普文了!php
缺陷:線程阻塞,在同一時間,同一域名的請求有必定數量限制,超過限制數目的請求會被阻塞算法
缺陷:瀏覽器與服務器只保持短暫的鏈接,瀏覽器的每次請求都須要與服務器創建一個 TCP 鏈接(TCP 鏈接的新建成本很高,由於須要客戶端和服務器三次握手),服務器完成請求處理後當即斷開 TCP 鏈接,服務器不跟蹤每一個客戶也不記錄過去的請求;解決方案:添加頭信息——非標準的 Connection 字段 Connection: keep-alive瀏覽器
改進點:緩存
一、持久鏈接安全
引入了持久鏈接,即 TCP 鏈接默認不關閉,能夠被多個請求複用,不用聲明 Connection: keep-alive(對於同一個域名,大多數瀏覽器容許同時創建 6 個持久鏈接)服務器
二、管道機制ide
即在同一個 TCP 鏈接裏面,客戶端能夠同時發送多個請求。性能
三、分塊傳輸編碼測試
即服務端沒產生一塊數據,就發送一塊,採用」流模式」而取代」緩存模式」。優化
四、新增請求方式
PUT:請求服務器存儲一個資源;
DELETE:請求服務器刪除標識的資源;
OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求;
TRACE:請求服務器回送收到的請求信息,主要用於測試或診斷;
CONNECT:保留未來使用
缺點:
雖然容許複用 TCP 鏈接,可是同一個 TCP 鏈接裏面,全部的數據通訊是按次序進行的。服務器只有處理完一個請求,纔會接着處理下一個請求。若是前面的處理特別慢,後面就會有許多請求排隊等着。這將致使「隊頭堵塞」
避免方式:一是減小請求數,二是同時多開持久鏈接
特色
採用二進制格式而非文本格式;徹底多路複用,而非有序並阻塞的、只需一個鏈接便可實現並行;使用報頭壓縮,下降開銷服務器推送
1. 二進制協議
HTTP/1.1 版的頭信息確定是文本(ASCII 編碼),數據體能夠是文本,也能夠是二進制。HTTP/2 則是一個完全的二進制協議,頭信息和數據體都是二進制,而且統稱爲」幀」:頭信息幀和數據幀。二進制協議解析起來更高效、「線上」更緊湊,更重要的是錯誤更少。
2. 徹底多路複用
HTTP/2 複用 TCP 鏈接,在一個鏈接裏,客戶端和瀏覽器均可以同時發送多個請求或迴應,並且不用按照順序一一對應,這樣就避免了」隊頭堵塞」。
3. 報頭壓縮
HTTP 協議是沒有狀態,致使每次請求都必須附上全部信息。因此,請求的不少頭字段都是重複的,好比 Cookie,同樣的內容每次請求都必須附帶,這會浪費不少帶寬,也影響速度。對於相同的頭部,沒必要再經過請求發送,只需發送一次;HTTP/2 對這一點作了優化,引入了頭信息壓縮機制;一方面,頭信息使用 gzip 或 compress 壓縮後再發送;另外一方面,客戶端和服務器同時維護一張頭信息表,全部字段都會存入這個表,產生一個索引號,以後就不發送一樣字段了,只需發送索引號。
4. 服務器推送
HTTP/2 容許服務器未經請求,主動向客戶端發送資源;經過推送那些服務器任務客戶端將會須要的內容到客戶端的緩存中,避免往返的延遲
HTTP 協議一般承載於 TCP 協議之上,在 HTTP 和 TCP 之間添加一個安全協議層(SSL 或 TSL),這個時候,就成了咱們常說的 HTTPS.
一、HTTPS 主要做用
- (1)對數據進行加密,並創建一個信息安全通道,來保證傳輸過程當中的數據安全;
- (2)對網站服務器進行真實身份認證。
二、HTTPS 和 HTTP 的區別
- 一、HTTPS 是加密傳輸協議,HTTP 是名文傳輸協議;
- 二、HTTPS 須要用到 SSL 證書,而 HTTP 不用;
- 三、HTTPS 比 HTTP 更加安全,對搜索引擎更友好,利於 SEO,
- 四、 HTTPS 標準端口 443,HTTP 標準端口 80;
- 五、 HTTPS 基於傳輸層,HTTP 基於應用層;
三、HTTPS 和 HTTP 的工做過程區別
HTTP 包含動做:
瀏覽器打開一個 TCP 鏈接
瀏覽器發送 HTTP 請求到服務器端
服務器發送 HTTP 迴應信息到瀏覽器
TCP 鏈接關閉
SSL 包含動做:
驗證服務器端
客戶端和服務器端選擇加密算法和密碼,確保雙方都支持
驗證客戶端(可選)
使用公鑰加密技術來生成共享加密數據
建立一個加密的 SSL 鏈接
基於該 SSL 鏈接傳遞 HTTP 請求
四、HTTPS 加密方式
對稱加密:加密和解密都是使用的同一個密鑰;
非對稱加密:
加密使用的密鑰和解密使用的密鑰是不相同的,分別稱爲:公鑰、私鑰;
公鑰和算法都是公開的,私鑰是保密的。
非對稱加密過程:
服務端生成配對的公鑰和私鑰
私鑰保存在服務端,公鑰發送給客戶端
客戶端使用公鑰加密明文傳輸給服務端
服務端使用私鑰解密密文獲得明文
數字簽名:簽名就是在信息的後面再加上一段內容,能夠證實信息沒有被修改過。
至此,不知道各位看明白沒有,反正明月仍是有點兒亂,好在原理上是基本明白了!自從上次清除了惡意代碼後(可參考【再次發現 functions.php 裏被植入惡意代碼】一文),如今明月的博客在手機端各個瀏覽器下瀏覽都是「很是 6」的感受,加上上週又給 Nginx 使用了 Brotli 壓縮算法(可參考【給 Nginx 添加谷歌 Brotli 壓縮算法支持】一文)和 HTTP/2 Push Sever 的配置啓用,上述這些都是基於 又拍雲 CDN的支持下進行的。目前不管是速度仍是安全性明月都是比較滿意的!
草根博客站長有話說, 深刻理解 HTTP/1.x、HTTP/2 和 HTTPS, http://baijiahao.baidu.com/s?id=1603680663774367388&wfr=spider&for=pc