Curl里的http2 · http2講解

2018-06-30 19:22 更新

11. curl中的http2

curl項(xiàng)目從2013年9月就開始對(duì)http2提供實(shí)驗(yàn)性的支持。

+

為了遵從curl的要旨,我們盡可能全方位地支持http2。curl通常被用作一個(gè)網(wǎng)站連接測(cè)試工具,希望這項(xiàng)使命也能在http2上被得以延續(xù)。

+

curl使用一個(gè)叫做nghttp2的庫(kù)來提供http2幀層的支持。curl依賴于nghttp2 1.0以上版本。

+

請(qǐng)注意當(dāng)前l(fā)inux curl和libcurl并沒有默認(rèn)啟用對(duì)HTTP/2協(xié)議的支持。

+

11.1. 跟HTTP 1.x非常相似

curl會(huì)在內(nèi)部把收到的http2頭部轉(zhuǎn)換為HTTP1.x風(fēng)格的頭部再呈現(xiàn)給用戶,這樣一來,它們就和目前的HTTP非常類似。這也使得無論是用curl還是HTTP,轉(zhuǎn)換都非常容易。類似地,curl會(huì)用相同的方式對(duì)發(fā)出的HTTP頭部做轉(zhuǎn)換,即發(fā)給curl的HTTP 1.x風(fēng)格頭部會(huì)在被發(fā)送到http2服務(wù)器之前完成轉(zhuǎn)換。這使得戶無需關(guān)心底層到底使用的是哪個(gè)版本的HTTP協(xié)議。

+

11.2. 不安全的純文本

curl通過升級(jí)頭部支持基于標(biāo)準(zhǔn)TCP的http2. 當(dāng)發(fā)起一個(gè)使用http2的HTTP請(qǐng)求,如果可能,curl會(huì)請(qǐng)求服務(wù)器把連接升級(jí)到http2.

+

11.3. TLS和相關(guān)庫(kù)

curl可以使用許多不同TLS的底層庫(kù)來提供TLS支持,http2也得這樣。TLS兼容http2的挑戰(zhàn)來自于對(duì)APLN以及一些NPN擴(kuò)展的支持。

+

基于最新版本的OpenSSL或NSS編譯curl可以同時(shí)獲得ALPN和NPN支持。而使用GnuTLS或PolarSSL只能得到ALPN。

+

11.4. 命令行中使用

無論是用純文本還是通過TLS,必須使用--http2參數(shù)來讓curl使用http2。在未使用該參數(shù)的默認(rèn)情況下,curl會(huì)使用HTTP/1.1。

+

11.5. libcurl參數(shù)

11.5.1 啟用HTTP/2

應(yīng)用程序和從前一樣使用https://或者http://風(fēng)格的URL,但你可以通過將curl_easy_setoptSURLOPT_HTTP_VERSION參數(shù)設(shè)置為CURL_HTTP_VERSION_2來使libcurl嘗試使用http2。它將優(yōu)先盡可能地使用http2,如果不行的話,會(huì)繼續(xù)使用HTTP 1.1。

+

11.5.2 多路復(fù)用

正如libcurl想盡可能量維持以前的用法,你需要通過CURLMOPT_PIPELINING參數(shù)為你的程序啟用HTTP/2多路復(fù)用功能。不然的話,它會(huì)保持一個(gè)連接只發(fā)送一個(gè)請(qǐng)求。

+

另一個(gè)需要注意的小細(xì)節(jié)是,當(dāng)你通過libcurl同時(shí)請(qǐng)求多個(gè)傳輸?shù)臅r(shí)候,請(qǐng)使用多接口模式。這樣能使應(yīng)用程序能同時(shí)啟用任意數(shù)量的傳輸。如果你寧愿讓libcurl等待也要把它們放到同一個(gè)連接來傳輸?shù)脑?,?qǐng)使用CURLOPT_PIPEWAIT參數(shù)。

+

11.5.3 服務(wù)器推送

libcurl 7.44.0及其后續(xù)版本開始支持HTTP/2服務(wù)器推送功能。你可以通過在CURLMOPT_PUSHFUNCTION參數(shù)中設(shè)定一個(gè)推送回調(diào)來激活該功能。如果應(yīng)用程序接受了該推送,它將為CURL建立一個(gè)新的傳輸,以便接受內(nèi)容。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)