什麼是 HTTP/2 ?
HTTP/2 在 RFC 7540 定稿,並且在 Nginx 已經被支援。 HTTP/2 是繼 1999 年 HTTP/1.1 發行後,歷時 16 年的新一代 HTTP 傳輸協定標準,以 Google 的 SPDY(網路內容傳輸的應用程式層協定)為基礎進行開發。而 Google 計畫於 2016年停止 SPDY 對 Chrome 的支援,全面採用 HTTP/2。
為什麼要升級 HTTP/2 ?
- HTTP/2 可以無痛的向下相容,程式無需做太大修改。因為大部分的 API 及 headers 是一樣的,也因此目前多數主流瀏覽器皆已支援。
- 不同於 HTTP/1.1 使用明文傳輸, HTTP/2 改用二進制並對 header 進行壓縮。因此,將不必再擔心 header 和 cookie 的大小。
- HTTP/2 是全多工的,能夠達到一個連線下的平行使用。Domain sharding 和 asset concatenation 變成 anti-pattern。對於有大量 asset 的網站來說,能夠大幅降低傳輸時間。
- 允許 Web Server 主動推送 Response 到 client 的 cache (但目前 Ngnix 不支持這個特性),例如:在接受請求前,就可以先發送 CSS 至 client,能夠加快網頁處理及資料更新。
- 採用新的 ALPN extension ,能夠更快地加密連線,加密協定是在初始化連線時定義的。
開始設定
目前大部分的瀏覽器都已經可以支援 HTTP/2,包含 IE11 and Edge,除了手機上的 Opera Mini 及 Android Browser。以下設定在未支持 HTTP/2 客戶端時會自動改用 HTTP/1.1。因為,網站有可能被舊的瀏覽器訪問或 search engine bots 存取。
以下為用到的需求:
- SSL certificate
- Nginx 1.9.5 或更高版本。
- 可以使用 HTTP/2 indicator 或 HTTP/2 test 來檢查。
Step 1. 虛擬 SSL certificates & keys
如果需要生成虛擬 certificates 及 keys,可以使用下面的命令(後面的步驟將使用這組認證):
1 | # Generate all keys and cefiticates in /etc/ssl |
1 | # Concatenate certificate and key into .pem format, compatible with HAProxy |
Step 2. Nginx setup
利用 mainline YUM repository ,而不是穩定版的安裝 Nginx 1.9。將 yum repo 位置放在 /etc/yum.repos.d/nginx.repo,然後執行 yum install。
1 | [nginx] |
1 | $ yum install -y nginx |
Step 3. 虛擬主機設定
建立 Nginx vhost.conf(虛擬主機設定文件)確保在使用 HTTP/2 的情況下正常工作。下面是一個簡單的 vhost 配置:
1 | server { |
- Line 3:listen 443 default_server ssl http2那一行。這就相當於你使用了HTTP/2。
- Line 7, 8:使用在獲取SSL證書那一步生成的dummy.crt和dummy.key。
最後,當你使用 https:// 連接網站時,HTTP/2 indicator 會告訴你網站正在運行 HTTP/2。
結論
HTTP/2 大幅降低了網頁間的傳輸速度,因此過去常常依靠 CSS sprites 與 Assets 合併來優化頁面載入速度,變得不是那麼重要。此外 HTTP/2 的升級是很容易的,而大多數的瀏覽器都已經支援。
今天不升級,要等什麼時候呢?
Reference
[1] The complete guide to HTTP/2 with HAProxy and Nginx
[2] 在 nginx 中啟用 HTTP/2 並提高 HTTPS 安全性與效能
[3] Open Source NGINX 1.9.5 Released with HTTP/2 Support
[4] 了解 HTTP/2 的特色與 HTTP/1.1 的差異
License
本文主要參考 The complete guide to HTTP/2 with HAProxy and Nginx,如果侵犯到你的權益,請及時聯繫我們。
本著作由 Chang, Wei-Yaun (v123582) 製作,
以創用CC 姓名標示-相同方式分享 3.0 Unported授權條款釋出。