httpx HTTP/2支持

2022-07-27 10:38 更新

HTTP/2 是 HTTP 协议的主要新迭代,它提供了更高效的传输,并具有潜在的性能优势。HTTP/2 不会更改请求或响应的核心语义,但会更改数据与服务器之间的发送方式。

与 HTTP/1.1 使用的文本格式不同,HTTP/2 是一种二进制格式。二进制格式提供完整的请求和响应多路复用,以及 HTTP 标头的高效压缩。流多路复用意味着 HTTP/1.1 要求每个并发请求有一个 TCP 流,而 HTTP/2 允许单个 TCP 流处理多个并发请求。

HTTP/2 还提供了对响应优先级和服务器推送等功能的支持。

有关HTTP / 2的综合指南,您可能需要查看“HTTP2解释”。

启用 HTTP/2

使用httpx客户端时,默认情况下不启用 HTTP/2 支持,因为 HTTP/1.1 是一个成熟的、久经沙场的传输层,而我们的 HTTP/1.1 实现目前可能被认为是更健壮的选项。默认情况下,将来版本的 httpx可能会启用 HTTP/2 支持。

如果您要发出高度并发的请求,则可能需要考虑试用我们的 HTTP/2 支持。您可以通过首先确保安装可选的HTTP / 2依赖项来执行此操作...

$ pip install httpx[http2]

然后实例化启用了 HTTP/2 支持的客户端:

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

您还可以将客户端实例化为上下文管理器,以确保所有 HTTP 连接都具有良好的作用域,并且在上下文块退出后将关闭。

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

HTTP/2 支持在Client 和AsyncClient 上都可用,尽管如果您发出大量并发请求,它通常在异步上下文中更有用。

检查 HTTP 版本

在客户端上启用 HTTP/2 支持并不一定意味着您的请求和响应将通过 HTTP/2 传输,因为客户端和服务器都需要支持 HTTP/2。如果连接到仅支持 HTTP/1.1 的服务器,则客户端将改用标准 HTTP/1.1 连接。

您可以通过检查响应上的​.http_version​属性来确定使用了哪个版本的 HTTP 协议。

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


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号