我在Ruby中发送HTTP/2 POST请求时发现了一个类似的问题 但是我想用PHP更新我的服务器
此处描述了基于HTTP/2的新Apple推送通知API:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html
任何具有HTTP/2经验的人都可以帮助我在PHP中作为客户端发出请求.
PHP> = 5.5.24的CURL扩展支持HTTP/2.(自此提交)
您还需要安装libcurl - curl函数使用的基础库 - 启用HTTP/2支持.这意味着比7.38.0更新的libcurl,但实际上,越新越好.Libcurl必须在显式启用HTTP/2支持的情况下构建,--with-nghttp2
在编译时使用标志.
只需使用curl,因为您通常使用它,并CURLOPT_HTTP_VERSION
通过传入设置选项以使用HTTP/2 CURL_HTTP_VERSION_2_0
.然后,如果客户端和服务器都支持请求,您将获得升级到版本2的请求.
在PHP 5.5.24之前,如果libcurl是使用HTTP/2支持构建的,则可以CURL_HTTP_VERSION_2_0
显式传入int值,因为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);
PHP> = 5.5.24不足以使用curl发出HTTP/2请求,即使定义了CURL_HTTP_VERSION_2_0也是如此.如果您尝试向APNS(Apple推送通知服务)发出请求,您将收到如下错误消息:
?@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f616538666562613534
由于curl是libcurl 的绑定,因此您必须在启用了http/2的情况下使用curl.
有关示例代码,请参阅我在此处对类似问题的回答
对于安装过程,您可以按照本教程进行操作