PHP 8.4: Curl: Новые константы CURL_HTTP_VERSION_3 и CURL_HTTP_VERSION_3ONLY для поддержки HTTP/3

Источник: «PHP 8.4: Curl: New CURL_HTTP_VERSION_3 and CURL_HTTP_VERSION_3ONLY constants for HTTP/3 support»
PHP 8.4: Curl: Новые константы 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.

$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);
}

Комментарии


Дополнительные материалы

Предыдущая Статья

Новое в Symfony 7.2: Улучшения DX шаблонов

Следующая Статья

Новое в Symfony 7.2: Непустые параметры контейнеров