2016-02-15 3 views
2

Я попытался скомпилировать cURL с поддержкой HTTP/2, следуя this tutorial. Я использую Docker, и мое приложение основано на official PHP Docker image, в котором используется Debian, хотя я создал те же проблемы на машине Ubuntu, работающей внутри виртуальной машины Vagrant.Подключение к APNS от Apple с использованием cURL с поддержкой HTTP 2 через nghttp2

Похоже, что проблем нет. Действительно, бег curl --version показывает все, что было бы ожидать:

curl 7.47.1 (x86_64-pc-linux-gnu) libcurl/7.47.1 OpenSSL/1.0.1k zlib/1.2.8 libidn/1.29 libssh2/1.4.3 nghttp2/1.7.1 librtmp/2.3 
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets 

Кроме того, я могу подключиться к https://nghttp2.org просто отлично:

curl --http2 -I https://nghttp2.org 
HTTP/2.0 200 
date:Mon, 15 Feb 2016 18:02:34 GMT 
content-type:text/html 
content-length:6680 
last-modified:Thu, 11 Feb 2016 14:29:49 GMT 
etag:"56bc9add-1a18" 
link:</stylesheets/screen.css>; rel=preload; as=stylesheet 
accept-ranges:bytes 
x-backend-header-rtt:0.000581 
server:nghttpx nghttp2/1.8.0-DEV 
via:1.1 nghttpx 
strict-transport-security:max-age=31536000 
x-frame-options:SAMEORIGIN 
x-xss-protection:1; mode=block 
x-content-type-options:nosniff 

Проблемы начинаются при попытке подключиться к Apple, недавно вновь запущен APNS Provider API, который теперь работает по протоколу HTTP/2.

Я установил завиток через Homebrew на моем Mac (с помощью --with-nghttp2), и я могу получить следующий (ожидаемый) ответ:

curl -d 'Hello' --http2 https://api.push.apple.com/3/device/test 
{"reason":"Forbidden"} 

Однако, если я пытаюсь запустить ту же команду из моего Докера образ, я получаю:

curl -d 'Hello' --http2 https://api.push.apple.com/3/device/test 
[email protected]@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f746573742048545450 

Я не уверен, почему это проблемы, как представляется, характерные для службы Apple, и что нужно сделать, чтобы исправить ситуацию.

Любая помощь будет очень оценен!

+0

Этот вопрос может быть более уместным на соответствующем сайте http://apple.stackexchange.com (AskDifferently). Подумайте, используя ссылку 'flag' в нижней части вашего Q и попросите модератора переместить ее туда. Пожалуйста, не публикуйте те же Q на двух разных сайтах. Спасибо и удачи. – shellter

ответ

0

Для всех, кто увидит это в будущем, я решил это решить, и ответ был на Server Fault.

0

Проблема заключается в том, что OpenSSL/1.0.1k не поставляется с протоколом ALPN.

Apple требует этого, тогда как https://nghttp2.org доволен NPN.

Чтобы решить эту проблему, запустите OpenSSL/1.0.2 и все настроено.