Расширение CURL для PHP> = 5.5.24 поддерживает HTTP/2. (с this commit)
Вам также потребуется установить libcurl - базовую библиотеку, которая использует функции curl - при включенной поддержке HTTP/2. Это означает, что libcurl новее, чем 7.38.0, но на самом деле, чем выше, тем лучше. Libcurl должен быть построен с поддержкой HTTP/2, явно включенным, используя флаг --with-nghttp2
во время компиляции.
Просто используйте curl, как вы обычно использовали его, и установите опцию CURLOPT_HTTP_VERSION
для использования HTTP/2, пройдя CURL_HTTP_VERSION_2_0
. Затем вы получите запрос, обновленный до версии 2 , если клиент и сервер поддерживают его.
До PHP 5.5.24, если libcurl был построен с поддержкой HTTP/2, вы можете передать значение int CURL_HTTP_VERSION_2_0
явно, поскольку PHP все равно передаст его libcurl. В настоящее время он имеет значение 3
- это не должно меняться, но может.
if (!defined('CURL_HTTP_VERSION_2_0')) {
define('CURL_HTTP_VERSION_2_0', 3);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
Я попытался установить обе версии 5.6.21 и 7.0.6 XAMPP как на Mac, так и на Linux, но я всегда получаю эту ошибку: 'HTTP/2 client строка префикса отсутствует или повреждена. Hex дамп для принятых байтов ... '. Вы знаете, как я могу это решить? Я могу отправить push-уведомления из командной строки, но в PHP это не работает. – Nickkk
Я хотел бы понять, будут ли push-уведомления с HTTP/2 и curl 7.38.0 работать в среде совместного размещения? Раньше хостинг-провайдеры блокировали порты 2195 и 2196 из-за соображений безопасности, поэтому push-уведомление с использованием TCP-сокета было бы невозможным. –
@raj: это совершенно отдельный вопрос, не подходящий для комментария к ответу ... –