夜空中最靚的二狗子是如何讓 HTTPS 快上加快的?

  • 2019 年 10 月 3 日
  • 筆記

二狗子是某不知名網站的站長,他熱衷於通過部落格分享日常的一些工作、生活、技術等,立志要成為夜空中最靚的仔。

但是前段時間有幾個用戶回饋,網站總是莫名會跳轉到一個 xx 網站,除此之外訪問速度也有點慢。作為夜空中最靚的仔,怎麼可能會讓劫持這種事情困擾用戶,於是全站快速啟用了 HTTPS。網站是安全了,但是有什麼辦法可以加快訪問速度,二狗子再一次陷入了沉思。

HSTS

一個夜深人靜的夜晚,二狗子開始深入研究 HTTPS 。他從維基百科查找了 HTTPS 的傳輸過程,只有熟悉了整個過程才能更好了解如何優化 HTTPS。

image

二狗子想著 HTTPS 雖然已經啟用,但是無法確認用戶是直接訪問 http:// 還是 https:// ,按照普遍的用戶習慣都是直接輸入站點域名,再由瀏覽器直接補充協議類型。但是這就存在一個問題,如果在網站設置當用戶訪問域名的時候強制 https 進行 301 或者 302 跳轉,但是這個過程中使用到 HTTP 因此容易發生劫持,受到第三方的攻擊。

image

有什麼更好的辦法來避免這種情況呢?話說有矛就有盾,二狗子深入研究發現 HSTS 是可以避免這種情況。

HSTS 是國際互聯網工程組織 IETF 正在推行一種新的 Web 安全協議,網站採用 HSTS 後,用戶訪問時無需手動在地址欄中輸入 https://,瀏覽器會自動採用 HTTPS 訪問網站地址,從而保證用戶始終訪問到網站的加密鏈接,保護數據傳輸安全。

HSTS 主要是通過伺服器發送響應頭的方式控制瀏覽器操作;

  1. 首先在伺服器響應頭中添加:
    Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
  2. 設置 max-age 參數,最長建議設置 6 個月;
  3. 當用戶下次使用 http 訪問,客戶端就會進行內部 307 跳轉;

開啟 HSTS 可以有效防範攻擊,同時省去 301/302 跳轉時間,大大提升網站安全係數和用戶體驗。

HTTP/2

開啟 HSTS 後,二狗子更加興奮,決定不睡覺繼續深入研究。

image

二狗子在 IT 界混了那麼久,最近頻頻聽說 HTTP/2,但並不了解 HTTP/2 有哪些「威武」的地方,於是又開啟了研究之旅。

HTTP/2 是 HTTP 協議自 1999 年 HTTP 1.1 發布後的首個更新,主要基於 SPDY 協議。它由互聯網工程任務組(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小組進行開發。該組織於 2014 年 12 月將 HTTP/2 標準提議遞交至 IESG 進行討論,於 2015 年 2 月 17 日被批准。HTTP/2 標準於 2015 年 5 月以 RFC 7540 正式發表。

HTTP/2 相比較 HTTP 1.1 有以下幾個改變:

  1. 採用二進位格式傳輸數據,而非 HTTP 1.x 的文本格式,二進位協議解析起來更高效。
  2. 採用多路復用,代替原來的序列和阻塞機制。所有就是請求的都是通過一個 TCP 連接並發完成。
  3. 伺服器推送,服務端可以在發送頁面 HTML 時主動推送其它資源,而不用等到瀏覽器解析到相應位置,發起請求再響應。例如服務端可以主動把 JS 和 CSS 文件推送給客戶端,而不需要客戶端解析 HTML 再發送這些請求。服務端可以主動推送,客戶端也有權利選擇接收與否。如果服務端推送的資源已經被瀏覽器快取過,瀏覽器可以通過發送 RST_STREAM 幀來拒收。主動推送也遵守同源策略,伺服器不會隨便推送第三方資源給客戶端。
  4. 頭部壓縮,HTTP/2 對消息頭採用 HPACK(專為 HTTP/2 頭部設計的壓縮格式)進行壓縮傳輸,能夠節省消息頭佔用的網路的流量。

HTTP/2 到底有多快,有一個 HTTP 1.1 VS HTTP/2 的演示 demo,二狗子看到之後興奮的睡不著覺。

image

按照這樣優化下去,二狗子的網站訪問速度馬上就要起飛了。

TLS 1.3

二狗子突然想到,SSL 版本已經發布到 TLS 1.3,它是 TLS 協議中最新、最快和最安全的版本,相比舊版的 TLS 協議增加了多項新功能。通過簡化 SSL 握手流程,提高了連接速度,減少了延遲,並通過移除有安全隱患的加密演算法,提高了用戶訪問的性能、效率和安全性等等。

為了更好的了解 TLS 1.3 是如何工作的,二狗子又開始了新的學習之旅。

image

從上圖可以看出,使用 TLS 1.2 需要兩次往返( 2-RTT )才能完成握手,然後才能發送請求。

image

TLS 1.3 的握手不再支援靜態的 RSA 密鑰交換,這意味著必須使用帶有前向安全的 Diffie-Hellman 進行全面握手。從上圖可以看出,使用 TLS 1.3 協議只需要一次往返( 1-RTT )就可以完成握手。

相比 TLS 1.2,TLS 1.3 的握手時間減半。這意味著訪問一個移動端網站,使用 TLS 1.3 協議,可能會減少將近 100ms 的時間。

「不是 HTTPS 讓網站變慢,而是網站優化的不夠」,二狗子發出深深的感慨。經過一夜的努力,終於給部落格開啟了 HSTS、HTTP/2 和 TLS 1.3,二狗子感覺自己成為了部落格界最靚的仔。d但是二狗子不知道的是,又拍雲提供一站式 SSL 證書申請服務,HSTS、HTTP/2.0、TLS 1.3 等功能一鍵即可開啟,分分鐘就能讓HTTPS快上加快。

推薦閱讀:

當 「HTTP」 先生遇上「S」小姐

TLS 1.3 VS TLS 1.2,讓你明白 TLS 1.3 的強大