HTTP/2.0 Protocol Negotiator 協(xié)議協(xié)商是什么?

HTTP/2.0本身并不強(qiáng)制使用SSL/TLS,和HTTP/1.1一樣,兼容“http”、“https”的兩種URL模式,支持以下兩種標(biāo)識(shí):
h2(over TLS),建立在TLS之上的HTTP/2.0,HTTPS模式。
h2c(over TCP),建立在明文TCP之上的HTTP/2.0,HTTP模式。

Protocol Negotiation

如果Client只支持HTTP/1.1,或者Server只支持HTTP/1.1,或者Server只支持h2c。
那么Client和Server如何選擇合適的協(xié)議呢?

h2c

針對(duì)h2c的協(xié)商機(jī)制,Client使用了HTTP/1.1的Upgrade機(jī)制,發(fā)起了HTTP/1.1的協(xié)議升級(jí),Upgrade字段指定了希望升級(jí)到的協(xié)議和版本號(hào),比如下面這段:

GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

如果Server不支持Upgrade列出的協(xié)議,可以直接以HTTP/1.1方式直接響應(yīng),比如下面這段:

HTTP/1.1 200 OK
Content-Length: 243
Content-Type: text/html

如果Server支持該協(xié)議,必須響應(yīng)101的狀態(tài)碼,并且在Upgrade空行響應(yīng)結(jié)束之后,可以以新的格式響應(yīng)請(qǐng)求,比如說(shuō)HTTP/2.0二進(jìn)制幀的格式。

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: h2c

h2協(xié)商

由于h2是依賴SSL/TLS的,基于h2的協(xié)議協(xié)商則依賴于ALPN(Application Layer Protocol Negotiation,應(yīng)用層協(xié)議協(xié)商)。也就是在TLS握手階段,通信雙方原本就要進(jìn)行加密套件等的協(xié)商,ALPN作為起拓展字段加入握手協(xié)商過(guò)程中,對(duì)通信不會(huì)增添性能影響。具體協(xié)商過(guò)程如下:

  1. 在TLS握手過(guò)程中,Client在Client Hello中指定拓展參數(shù)ALPN Protocol,即希望升級(jí)到的協(xié)議列表。
  2. Server收到Client Hello,從展參數(shù)ALPN Protocol列表里選擇支持的協(xié)議。在Server Hello中,回復(fù)拓展參數(shù)ALPN Protocol,值為選擇的協(xié)議。

至此就完成了協(xié)議協(xié)商,雙方按照協(xié)商的協(xié)議進(jìn)行通信。

盡管HTTP/2.0支持h2c模式,但是可能是考慮到安全問(wèn)題,基本上主流的瀏覽器都要求HTTP/2.0部署在SSL/TLS上,所以現(xiàn)在HTTP2.0基本都是基于h2標(biāo)識(shí),基于HTTPS模式部署。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容