Chrome將於5月底升級至第51版,屆時大部分使用者將不能使用HTTP/2

weixin_33763244發表於2016-05-23

早在去年8月,Chromium專案已經決定開始廢棄NPN協商協議(一個傳輸層安全協議擴充套件協議)。即將在5月31日釋出的Chrome 51穩定版本中,NPN協商協議將被正式廢除,僅支援ALPN協商協議。也就是說,所有目前基於NPN協商協議的HTTP/2協議都將無法使用,並被降級到HTTP/1.1。

\\

這對於客戶端來說沒有太大影響,但是對於希望使用HTTP/2協議的服務端,將NPN升級到ALPN,並不是一件容易的事情,OpenSSL至少需要升級到1.0.2版本才可以支援ALPN。

\\

下表是常見伺服器作業系統版本中自帶的OpenSSL版本:

\\
作業系統OpenSSL版本
CentOS 50.9.8e
CentOS 61.0.1e
CentOS 71.0.1e
Ubuntu 14.04 LTS1.0.1f
Ubuntu 16.04 LTS1.0.2g
Debian 7 (Wheezy)1.0.1e
Debian 8 (Jessie)1.0.1k

從上表可以看出,目前常用的伺服器版本中,預設OpenSSL為1.0.2的只有Ubuntu 16.04 LTS。其他版本如果要升級OpenSSL版本,成本非常高,因為有很多包依賴OpenSSL,這些包都需要重新打包並進行測試。另一方面,OpenSSL 1.0.1的支援到2016年12月31日就將結束

\\

在一個傳統搭建LAMP(Linux、Apache、MySQL、PHP)伺服器上,通常會依賴OpenSSL庫的軟體有:

\\
$ lsof | grep libssl | awk '{print $1}' | sort | uniq\anvil\fail2ban\gdbus\gmain\httpd\postfix\mysqld\NetworkManager\nginx\php-fpm\puppet\sshd\sudo\tuned\zabbix_agent
\\

也就是說,如果系統的OpenSSL版本升級,這些包都需要重新打包,如果有API不相容的地方,升級成本將會更高。

\\

在Chrome 51穩定版之前,以下示例的協商結果會使用HTTP/2協議:

\\
coolex ~ # nghttp -v -n https://ma.ttias.be\[  0.252] Connected\[  0.507][NPN] server offers:\          * h2\          * http/1.1\The negotiated protocol: h2
\\

但是升級之後,由於NPN協商邏輯已經廢棄,Chrome將無法協商獲取伺服器支援HTTP/2協議,進而降級成HTTP/1.1協議。

\\

對於該問題,目前來看最簡單的方式,是將應用執行到諸如Docker等的容器中。

\\

感謝劉振濤對本文的審校。

\\

給InfoQ中文站投稿或者參與內容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ@丁曉昀),微信(微訊號:InfoQChina)關注我們。

相關文章