成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么Chrome又不支持我的HTTP/2網(wǎng)站了?

系統(tǒng) 瀏覽器 系統(tǒng)運維
谷歌開發(fā)了一個新的傳輸層協(xié)議,名為 SPDY。由于這個新的協(xié)議用了的人都說好,因此谷歌就把這個協(xié)議提交到了 IETF,然后大家覺得,SPDY 這名字不好聽(SPDY 是谷歌的注冊商標(biāo)),就干脆叫 HTTP/2 吧!

[[175587]]

昨晚偶爾清理 Chrome 插件時發(fā)現(xiàn)我的 “HTTP/2 and SPDY indicator”插件好像好久沒亮了。這個插件在你訪問到一個支持 HTTP/2 (或之前的 SPDY 協(xié)議)的網(wǎng)站時會點亮,而我明明記得之前專門讓 https://linux.cn/ 支持了 HTTP/2 。

我的***反應(yīng)是不是這個插件有問題了?于是打開 Chrome 調(diào)試工具,然后發(fā)現(xiàn),真的是請求和響應(yīng)都是 HTTP/1.1 哎!

經(jīng)過一番研究,原來是從 Chrome 51 開始,在 2016 年 5 月 31 日之前,對支持 NPN 協(xié)商協(xié)議的 HTTP/2 網(wǎng)站還會采用 HTTP/2 訪問;而之后就只支持 ALPN 協(xié)商協(xié)議的 HTTP/2 網(wǎng)站了——而目前 ALPN 協(xié)議僅被鮮少有發(fā)行版支持 openssl-1.0.2 支持。

發(fā)生了什么?

服務(wù)器端

我們知道,最初的 Web 訪問協(xié)議是 HTTP/1,包括以前的 HTTP/1.0 和現(xiàn)在大部分網(wǎng)站采用的 HTTP/1.1(HTTP/0.9 是試驗性協(xié)議,已經(jīng)廢棄)。但是隨著 Web 應(yīng)用越來越復(fù)雜,之前的 HTTP/1.x 協(xié)議就看起來不能滿足日益龐雜的 Web 服務(wù)需求了。比如說,明文請求、請求復(fù)用等問題。因此,谷歌就開發(fā)了一個新的傳輸層協(xié)議,名為 SPDY。由于這個新的協(xié)議用了的人都說好,因此谷歌就把這個協(xié)議提交到了 IETF,然后大家覺得,SPDY 這名字不好聽(SPDY 是谷歌的注冊商標(biāo)),就干脆叫 HTTP/2 吧!

SPDY 協(xié)議是基于 SSL/TLS 的,谷歌開發(fā)了一個名為下一代協(xié)議協(xié)商(Next Protocol Negotiation)(NPN)的 SSL/TLS 擴展,用于在客戶端連接服務(wù)器時協(xié)商是否采用 HTTP/2 協(xié)議。SPDY 協(xié)議是由 Web 服務(wù)器所實現(xiàn)支持的,而 NPN 則是由 OpenSSL 等 SSL 實現(xiàn)支持的。

但是,隨著 SPDY 被提交到 IETF,然后變成了 HTTP/2 協(xié)議,谷歌也放棄了 SPDY 的開發(fā),全力投入到了 HTTP/2 的開發(fā)中,之前所采用 NPN 也被一種新的協(xié)商協(xié)議 ALPN ——應(yīng)用層協(xié)議協(xié)商(Application-Layer Protocol Negotiation)所替代。NPN 和 ALPN 是不兼容的,它們的主要不同是:

  • NPN 是服務(wù)器發(fā)送所支持的協(xié)議列表,由客戶端進行選擇。而 ALPN 則是客戶端發(fā)送該列表,由服務(wù)端選擇。
  • 在 NPN 中,最終的選擇結(jié)果是在 Change Cipher Spec 之后發(fā)送給服務(wù)端的,也就是說是被加密了的。而在 ALPN 中,所有的協(xié)商都是明文的。

這樣做的好處主要是安全性方面的考慮,但是這造成了一個問題就是,NPN 已經(jīng)廣泛地被 OpenSSL 支持,而 ALPN 則目前只有***的 openssl-1.0.2 才支持。當(dāng)前的幾個主流 Linux 發(fā)行版的 OpenSSL 版本以及支持的協(xié)商協(xié)議如下:

Linux 發(fā)行版 OpenSSL 版本 所支持的協(xié)商協(xié)議
CentOS/Oracle Linux/RHEL 5.10+ 0.9.8e 不支持
CentOS/Oracle Linux/RHEL 6.5+, 7.0+ 1.0.1e NPN
Ubuntu 12.04 LTS 1.0.1 NPN
Ubuntu 14.04 LTS 1.0.1f NPN

Ubuntu 16.04 LTS

1.0.2g

ALPN 和 NPN

Debian 7.0 1.0.1e NPN
Debian 8.0 1.0.1k NPN

從上面我們可以看到,基本上所有的服務(wù)器級的 Linux 發(fā)行版都不支持 OpenSSL 及 ALPN,唯一支持的 Ubuntu 16.04 LTS 顯然用的不會很多。不要小看這 0.0.1 的版本差異,對于別的軟件來說這 0.0.1 的差異基本上可以忽略,但是對于 OpenSSL 來說,那就是兩個版本代際。OpenSSL 是個相當(dāng)?shù)讓拥膸?,很多重要的軟件都依賴于它,因此各個發(fā)行版在升級 OpenSSL 時采用的態(tài)度是相當(dāng)保守,比如我們可以看看 CentOS 系統(tǒng)中有哪些軟件使用了 OpenSSL:

  1. $ lsof | grep libssl | awk '{print $1}' | sort | uniq 
  2. anvil 
  3. fail2ban 
  4. gdbus 
  5. gmain 
  6. httpd 
  7. postfix 
  8. mysqld 
  9. NetworkManager 
  10. nginx 
  11. php-fpm 
  12. puppet 
  13. sshd 
  14. sudo 
  15. tuned 
  16. zabbix_agent 

沒有經(jīng)過足夠的測試,Linux 發(fā)行版是不會在產(chǎn)品級(服務(wù)器級)的環(huán)境中隨便升級的。為了解決舊版本(1.0.1)中的安全問題,他們寧可將新的版本(1.0.2)中安全修復(fù)移植回舊版本,也不會升級到有新功能的新版本(1.0.2),這就是你見到了各種 1.0.1e、1.0.1k 這樣的版本號的原因。

當(dāng)然,你可以自己編譯一個*** OpenSSL 替代你系統(tǒng)中的 openssl-1.0.1,但是我想你不會這樣做的,是吧?

順便提一句,NPN 和 ALPN 可以并存,但是會客戶端會優(yōu)先選擇 ALPN。

瀏覽器端(Chrome)

從 Chrome 51 開始,谷歌就去掉了對 SPDY 的支持,不過這不是個事,因為不但使用 SPDY 的 Web 服務(wù)器比較少,而且從 SPDY 升級到 HTTP/2 也很簡單,這方面 Nginx、Apache 等服務(wù)器的配置都很簡單。

但不幸的是,在 Chrome 51 中,谷歌也去掉了對 NPN 的支持!如果你的 Web 服務(wù)器使用的是 openssl-1.0.2 以下的版本,不支持 ALPN 協(xié)商,那么 Chrome 51 及以后版本就會以 HTTP/1 協(xié)議訪問你的網(wǎng)站。

谷歌對放棄 NPN 支持做了一個簡短的解釋,但是不管怎么說,NPN 協(xié)議在 Chrome 51 之后的版本不會再次回來了。而另一方面,OpenSSL 在 2016 年 12 月 31 日之后也不會繼續(xù)發(fā)布 openssl-1.0.1 系列的新版本了,安全修復(fù)到此為止。

而在這種情況下,你原本支持 HTTP/2 的網(wǎng)站通過連接復(fù)用等 HTTP/2 所提供的新特性,在 Chrome 下訪問取得了不錯的體驗,而現(xiàn)在又跌回了之前的殘舊狀態(tài)。

怎么辦呢?

有幾種辦法:

換瀏覽器

山不來就我,我去就山。Chrome 51+ 不支持帶 NPN 的 HTTP/2 網(wǎng)站,作為瀏覽者,你可以使用其它的瀏覽器,比如 Safari、Edge 之類的。這樣,你就可以用新的協(xié)議來訪問世界上那 10% 支持 HTTP/2 的 Web 服務(wù)器了。

但是,作為服務(wù)器運營者,你卻不能忽視高達 50% 以上的 Chrome 用戶。

換服務(wù)器

如上面所示,Ubuntu 16.04 LTS 是目前唯一官方支持 openssl-1.0.2 的 Linux 發(fā)行版,如果你一直采用 Ubuntu 做服務(wù)器,考慮一下升級吧。LTS 版本的支持期長達五年。

當(dāng)然,在產(chǎn)品環(huán)境中,即便你是 Ubuntu 服務(wù)器,更新版本也是一件重大事宜,宜慎思之。

重新編譯

既然換服務(wù)器不是一個好的選擇,那你還有一個方案,就是使用新的 openssl-1.0.2 源代碼重新編譯你的 Web 服務(wù)器,比如 nginx。

下面我簡單介紹一下如何用 openssl-1.0.2 來編譯 nginx。(1.0.2 系列的***版本是 1.0.2j,當(dāng)然你要非用 1.1.0,我也無話可說……)

首先下載并解壓 openssl-1.0.2j:

  1. # wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz 
  2. # tar -zxvf openssl-1.0.2j.tar.gz 

然后在編譯 nginx 的時候使用 --with-openssl=../openssl-1.0.2j 選項以及你的其它選項:

  1. ./configure --with-openssl=../openssl-1.0.2j --with-http_v2_module --with-http_ssl_module 

配置并編譯之后,你可以用 nginx -V來看一下你的 nginx 中的 OpenSSL 版本。

這種自行編譯的好處是靈活性高,但是你需要隨時注意各個組件是否有嚴(yán)重的安全漏洞,并在出了修復(fù)版本之后重新編譯。

容器

除了自己編譯之外,如果你的系統(tǒng)環(huán)境中已經(jīng)有了容器支持,你還可以在容器中運行一個 Ubuntu 16.04 LTS,并將 Web 服務(wù)器運行在其中。

總結(jié)

以上就是 HTTP/2 和 Chrome 之間的故事,你準(zhǔn)備去升級 HTTP/2 支持了嗎?要知道相比 HTTP/2 的訪問體驗,你肯定不會想再回到 HTTP/1 了。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2021-10-27 07:15:36

Go 循環(huán)引用

2020-07-22 08:01:41

Python開發(fā)運算符

2020-10-09 06:48:19

Pythonswitch語句

2021-12-09 10:51:47

Go繼承

2021-12-15 07:49:22

Go語言設(shè)計

2021-02-01 13:53:53

StringlongJava

2023-01-28 08:05:32

轉(zhuǎn)換Go泛型

2024-01-01 08:10:40

Go語言map

2024-01-05 08:45:35

Go語言map

2024-05-28 08:55:52

2009-03-12 08:42:38

AndroidWMMTK

2021-06-11 00:03:31

鴻蒙智能手機

2021-11-08 11:02:01

Go函數(shù)重載

2021-08-02 09:31:20

Python工具代碼

2021-01-22 15:31:47

JavaSwitchString

2021-07-13 08:09:34

微博推特評論

2020-11-11 14:59:36

ChromeARMMozilla

2009-03-11 17:32:22

聯(lián)發(fā)科WMAndroid

2014-06-05 15:16:49

Linux開源Flash

2024-03-08 08:51:59

Gomain函數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久亚洲一区二区三区四区 | 亚洲 一区| 精品日韩在线 | www亚洲精品| 欧美男人天堂 | 黄色中文字幕 | 亚洲精品成人 | 人人艹人人爽 | 亚洲视频一区二区三区 | 成人在线观看黄 | 国产精品爱久久久久久久 | 全部免费毛片在线播放网站 | 黄色在线免费观看 | www久| 精品国产青草久久久久96 | 另类视频在线 | 99久久婷婷国产综合精品首页 | 久久这里只有精品首页 | 国产激情91久久精品导航 | 中文字幕色站 | 国产一区二区在线免费观看 | 亚洲国产一区二区在线 | 91精品久久久久久久久中文字幕 | 91精品一区二区三区久久久久 | 国产一区二区 | 亚洲欧美中文日韩在线v日本 | 日本国产高清 | 先锋资源站 | 无毛av | 91在线第一页 | 久久久男人的天堂 | 成人毛片视频在线播放 | 久久久久久久夜 | 干出白浆视频 | 99色综合| 91九色在线观看 | 欧美a级成人淫片免费看 | 婷婷99| 一本一道久久a久久精品综合 | 国产乱一区二区三区视频 | 亚洲国产精品人人爽夜夜爽 |