PHP 8.4: Curl: Новые константы CURL_HTTP_VERSION_3 и CURL_HTTP_VERSION_3ONLY для поддержки HTTP/3
CURL_HTTP_VERSION_3
и CURL_HTTP_VERSION_3ONLY
для поддержки HTTP/3Расширение PHP Curl способно выполнять HTTP/3 (также известный как QUIC) HTTP-запросы, если расширение Curl скомпилировано с зависимостями, необходимыми для HTTP/3.
Для расширения Curl в PHP 8.4 требуется libcurl 7.61.0 или более поздняя версия. Для поддержки HTTP/3 Curl требуется libcurl 7.66.0 или более поздняя версия.
Начиная с версии PHP 8.2 и выше, можно включить поддержку HTTP/3, передав корректные параметры в опцию Curl CURLOPT_HTTP_VERSION
.
В PHP 8.4 расширение Curl объявляет две новые PHP константы, являющиеся параметрами для опции Curl CURLOPT_HTTP_VERSION
.
CURL_HTTP_VERSION_3
(значениеint 30
)CURL_HTTP_VERSION_3ONLY
(значениеint 31
)
$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
Когда опция Curl CURLOPT_HTTP_VERSION
установлена в CURL_HTTP_VERSION_3
, Curl попытается использовать HTTP/3 для запроса, но в случае неудачи вернётся к более ранним версиям HTTP. Это типичный и желательный способ включения HTTP/3, так как он использует оппортунистический подход к включению HTTP/3.
Константе CURL_HTTP_VERSION_3
присвоено значение int
30
.
CURL_HTTP_VERSION_3ONLY
Если для опции Curl CURLOPT_HTTP_VERSION
установлено значение 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 и более поздних версиях можно использовать тривиальный полифилл этих двух новых констант. Хотя это и не рекомендуется, можно также включить поддержку HTTP/3, передав напрямую целочисленные значения этих констант.
if (curl_version()['version'] >= 0x075800) {
define('CURL_HTTP_VERSION_3', 30);
define('CURL_HTTP_VERSION_3ONLY', 31);
}