httpx HTTP/2支持

2022-07-27 10:38 更新

HTTP/2 是 HTTP 協(xié)議的主要新迭代,它提供了更高效的傳輸,并具有潛在的性能優(yōu)勢。HTTP/2 不會(huì)更改請求或響應(yīng)的核心語義,但會(huì)更改數(shù)據(jù)與服務(wù)器之間的發(fā)送方式。

與 HTTP/1.1 使用的文本格式不同,HTTP/2 是一種二進(jìn)制格式。二進(jìn)制格式提供完整的請求和響應(yīng)多路復(fù)用,以及 HTTP 標(biāo)頭的高效壓縮。流多路復(fù)用意味著 HTTP/1.1 要求每個(gè)并發(fā)請求有一個(gè) TCP 流,而 HTTP/2 允許單個(gè) TCP 流處理多個(gè)并發(fā)請求。

HTTP/2 還提供了對響應(yīng)優(yōu)先級和服務(wù)器推送等功能的支持。

有關(guān)HTTP / 2的綜合指南,您可能需要查看“HTTP2解釋”。

啟用 HTTP/2

使用httpx客戶端時(shí),默認(rèn)情況下不啟用 HTTP/2 支持,因?yàn)?HTTP/1.1 是一個(gè)成熟的、久經(jīng)沙場的傳輸層,而我們的 HTTP/1.1 實(shí)現(xiàn)目前可能被認(rèn)為是更健壯的選項(xiàng)。默認(rèn)情況下,將來版本的 httpx可能會(huì)啟用 HTTP/2 支持。

如果您要發(fā)出高度并發(fā)的請求,則可能需要考慮試用我們的 HTTP/2 支持。您可以通過首先確保安裝可選的HTTP / 2依賴項(xiàng)來執(zhí)行此操作...

$ pip install httpx[http2]

然后實(shí)例化啟用了 HTTP/2 支持的客戶端:

client = httpx.AsyncClient(http2=True)
...

您還可以將客戶端實(shí)例化為上下文管理器,以確保所有 HTTP 連接都具有良好的作用域,并且在上下文塊退出后將關(guān)閉。

async with httpx.AsyncClient(http2=True) as client:
    ...

HTTP/2 支持在Client 和AsyncClient 上都可用,盡管如果您發(fā)出大量并發(fā)請求,它通常在異步上下文中更有用。

檢查 HTTP 版本

在客戶端上啟用 HTTP/2 支持并不一定意味著您的請求和響應(yīng)將通過 HTTP/2 傳輸,因?yàn)榭蛻舳撕头?wù)器都需要支持 HTTP/2。如果連接到僅支持 HTTP/1.1 的服務(wù)器,則客戶端將改用標(biāo)準(zhǔn) HTTP/1.1 連接。

您可以通過檢查響應(yīng)上的?.http_version?屬性來確定使用了哪個(gè)版本的 HTTP 協(xié)議。

client = httpx.AsyncClient(http2=True)
response = await client.get(...)
print(response.http_version)  # "HTTP/1.0", "HTTP/1.1", or "HTTP/2".


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號