gpt4 book ai didi

curl - 为什么 curl 在 mac 上使用 HTTP/1.1 而不是 HTTP/2?

转载 作者:行者123 更新时间:2023-12-04 22:42:05 25 4
gpt4 key购买 nike

根据这个https://curl.haxx.se/docs/http2.html
Since 7.47.0, the curl tool enables HTTP/2 by default for HTTPS connections.
使用自制软件安装最新版本并检查:

curl --version
curl 7.54.1 (x86_64-apple-darwin15.6.0) libcurl/7.54.1 SecureTransport zlib/1.2.5

但正在运行 curl在启用 HTTP2 的 URL 上(例如使用 https://tools.keycdn.com/http2-test 进行测试)我得到:
curl -I http://www.google.co.uk 
HTTP/1.1 200 OK


curl --http2 -v http://www.google.co.uk
curl: (1) Unsupported protocol

知道为什么它使用 HTTP/1.1 而不是 HTTP/2 吗?

最佳答案

您可以构建 curl 以使用许多不同的 TLS/SSL 库之一,每个库的功能集都略有不同,并为 curl 提供了略有不同的条件。

您在问题列表中显示的 curl SecureTransport作为它构建使用的 TLS 库,macOS 原生 TLS 库。

安全传输根本没有为 curl 通过 TLS 协商 HTTP/2 提供必要的手段——或者至少它没有,因为我被告知最新版本现在支持 ALPN,所以 future 的 curl 版本应该能够即使使用安全传输,也可以通过 TLS 执行 HTTP/2。

除了正确的 TLS 协商之外,curl 还需要说 HTTP/2,这要归功于使用古老的 nghttp2 库,因此这是 curl 能够说 HTTP/2 的第二个依赖项。使用 nghttp2 时,即使 TLS 库无法正确协商 ALPN,curl 实际上也可以通过纯文本 HTTP 使用 HTTP/2。

使固定?

后来的 macOS 版本提供了使用 libreSSL 构建的 curl 和内置的 HTTP/2 支持。

如果您选择使用另一个 TLS 库(例如 OpenSSL、GnuTLS 或 NSS)重建 curl,那么它现在已经可以通过 HTTPS 使用 HTTP/2 了。

关于curl - 为什么 curl 在 mac 上使用 HTTP/1.1 而不是 HTTP/2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44923354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com