J'ai trouvé une question similaire à Envoi de la requête HTTP/2 POST en Ruby Mais je souhaite mettre à jour mon serveur avec PHP
La nouvelle API basée sur les notifications Apple Push HTTP/2 décrite ici: https://developer.Apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html
Toute personne ayant l'expérience HTTP/2 m'aide à faire une demande en tant que client en PHP.
L’extension CURL pour PHP> = 5.5.24 prend en charge HTTP/2. (depuis ce commit )
Vous devez également installer libcurl, la bibliothèque sous-jacente utilisée par les fonctions curl, avec la prise en charge de HTTP/2 activée. Cela signifie une libcurl plus récente que la 7.38.0 mais, en réalité, la plus récente sera la meilleure. Libcurl doit avoir été construit avec le support HTTP/2 explicitement activé, en utilisant le drapeau --with-nghttp2
au moment de la compilation.
Utilisez simplement curl comme vous le feriez normalement, et définissez l'option CURLOPT_HTTP_VERSION
pour qu'elle utilise HTTP/2 en transmettant CURL_HTTP_VERSION_2_0
. Ensuite, la demande sera mise à niveau vers la version 2 si le client et le serveur la prennent en charge.
Avant PHP 5.5.24, si libcurl a été construit avec le support HTTP/2, vous pouvez transmettre la valeur int de CURL_HTTP_VERSION_2_0
explicitement, car PHP le transmettra toujours à libcurl. Actuellement, sa valeur est 3
- cela ne devrait pas changer, mais pourrait.
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);
Avoir PHP> = 5.5.24 ne suffit pas pour faire une requête HTTP/2 avec curl, même si CURL_HTTP_VERSION_2_0 est défini. Si vous essayez d'envoyer une demande à APNS (Apple Push Notification Service), vous recevrez un message d'erreur du type suivant:
?@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f616538666562613534
Comme curl est un binding pour libcurl, vous devez également avoir curl avec http/2 activé.
Pour un exemple de code, voir ma réponse à une question similaire ici sur SO
Pour la procédure d’installation, vous pouvez suivre ce tutorial
À l'heure actuelle, il n'y a pas de support direct HTTP/2
en PHP.
Il y a un idea pour ajouter un tel support à l'avenir directement à PHP: https://wiki.php.net/ideas/php6#http2_support }
La bibliothèque tierce Guzzle https://github.com/guzzle/guzzle prend en charge HTTP/2, si les versions php et curl correctes sont installées:
use GuzzleHttp\Client;
$client = new Client();
$client->get('https://http2.akamai.com/demo/tile-0.png', [
'version' => 2.0,
'debug' => true,
]);
Découvrez les images Docker Apache et CLI PHP que j’ai construites à cet effet et qui ajoutent la prise en charge HTTP/2 à la bibliothèque officielle PHP 5.6. Cela supprime toutes les erreurs HTTP/2 client preface string missing or corrupt
.
Une fois que vous avez obtenu le bon environnement, après avoir essayé plusieurs bibliothèques JWS/JWT pour PHP, je n’ai trouvé que Spomky-Labs/jose fonctionnant parfaitement avec les APN.