Sending HTTP/2 POST Rubyでのリクエスト で同様の質問を見つけましたが、PHPでサーバーを更新したいです
新しいAppleここで説明されているプッシュ通知HTTP/2ベースのAPI: https://developer.Apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ APNsProviderAPI.html
HTTP/2の経験がある人ならだれでも、PHPでクライアントとしてリクエストを行うのに役立ちます。
PHP> = 5.5.24のCURL拡張は、HTTP/2をサポートしています。 ( このコミット )
HTTP/2サポートを有効にして、libcurlをインストールする必要があります(curl関数が使用する基礎ライブラリ)。これは、7.38.0より新しいlibcurlを意味しますが、実際には、新しいほど良いです。 Libcurlは、コンパイル時に--with-nghttp2
フラグを使用して、HTTP/2サポートを明示的に有効にして構築する必要があります。
通常使用するcurlを使用し、 CURLOPT_HTTP_VERSION
オプションを設定して、CURL_HTTP_VERSION_2_0
を渡してHTTP/2を使用します。次に、クライアントとサーバーの両方がそれをサポートしている場合、リクエストをバージョン2ifにアップグレードします。
PHP 5.5.24より前のバージョンでは、libcurlがHTTP/2サポート付きでビルドされている場合、PHPが引き続き渡すので、CURL_HTTP_VERSION_2_0
のint値を明示的に渡すことができます。 libcurlまで。現在、それは3
の値を持っています—これは変更すべきではありませんが、couldです。
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);
CURL_HTTP_VERSION_2_0が定義されていても、PHP> = 5.5.24はcurlを使用してHTTP/2リクエストを行うのに十分ではありません。 APNS(Apple Push Notification Service)へのリクエスト:
?@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f616538666562613534
Curlはlibcurlの binding であるため、http/2を有効にしたcurlも必要です。
サンプルコードについては、SOで同様の質問に対する answer を参照してください。
インストール手順については、これに従うことができます tutorial
現在のところ、直接HTTP/2
PHPでのサポート。
将来的にPHPに直接このようなサポートを追加するideaがあります: https://wiki.php.net/ideas/ php6#http2_support
サードパーティライブラリGuzzle https://github.com/guzzle/guzzle は、正しいphpおよびcurlバージョンがインストールされている場合、HTTP/2をサポートします。
use GuzzleHttp\Client;
$client = new Client();
$client->get('https://http2.akamai.com/demo/tile-0.png', [
'version' => 2.0,
'debug' => true,
]);
Apache および [〜#〜] cli [〜#〜] PHP HTTPを追加するこの目的のために作成したDockerイメージ/ 2公式のサポートPHP 5.6 Dockerライブラリ。これにより、HTTP/2 client preface string missing or corrupt
エラー。
適切な環境になったら、PHP私は Spomky-Labs/jose のみがAPNsで完全に動作することを発見しました。