PHP 8.4: Curl: 新增 CURL_HTTP_VERSION_3 及 CURL_HTTP_VERSION_3ONLY 常量,以支持 HTTP/3
如果 Curl 扩展是用 HTTP/3 的必要依赖项编译的,则 PHP Curl 扩展能够发出 HTTP/3(也称为 QUIC)HTTP 请求。
PHP 8.4 中的 Curl 扩展要求 libcurl 7.61.0 或更高版本。Curl HTTP/3 支持要求 libcurl 7.66.0 或更高版本。
从 PHP 8.2 及更高版本开始,可以通过向 CURLOPT_HTTP_VERSION
的 Curl 选项传递正确的参数来启用 HTTP/3 支持。
在 PHP 8.4 中,Curl 扩展声明了以下两个新的 PHP 常量,它们是 CURLOPT_HTTP_VERSION
Curl 选项的可接受参数。
CURL_HTTP_VERSION_3
(值为int
30
)CURL_HTTP_VERSION_3ONLY
(值int
31
)
请注意,PHP 8.2 及更高版本上都可以启用 HTTP/3。PHP 8.4 中唯一的区别是上述值被声明为 PHP 常量。
$ch = curl_init("https://php.watch/");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_3);
curl_exec($ch);
如果 Curl 扩展不是使用 HTTP/3 支持编译的,curl_setopt
调用将返回 false
, CURLOPT_HTTP_VERSION
选项将保持默认值或现有值(如果之前已设置)。
CURL_HTTP_VERSION_3
当 CURLOPT_HTTP_VERSION
Curl 选项设置为 CURL_HTTP_VERSION_3
时,Curl 将尝试对请求使用 HTTP/3,但如果失败,将回退到之前的 HTTP 版本。这是启用 HTTP/3 的典型和理想的方式,因为它采用了机会主义的方法来启用 HTTP/3。CURL_HTTP_VERSION_3
常量被赋值为 int
值 30
。
CURL_HTTP_VERSION_3ONLY
当 CURLOPT_HTTP_VERSION
Curl 选项设置为 CURL_HTTP_VERSION_3ONLY
时,Curl 将尝试使用 HTTP/3,但如果主机不支持 HTTP/3,则请求将失败。CURL_HTTP_VERSION_3ONLY
常量被赋值为 int
值 31
。.
向后兼容性影响
CURL_HTTP_VERSION_3
及 CURL_HTTP_VERSION_3ONLY
是全局命名空间中声明的两个 PHP 常量。除非在用户空间的 PHP 应用中声明了同名常量,该更新不会导致向后兼容性问题。
在 PHP 8.2 及更高版本中,可以轻松地对这两个新常量进行 polyfill。虽然不推荐,但也可以通过直接传递这些常量的整数值来启用 HTTP/3 支持。
if (curl_version()['version'] >= 0x075800) {
define('CURL_HTTP_VERSION_3', 30);
define('CURL_HTTP_VERSION_3ONLY', 31);
}