7

Diese Frage, wie Sie vielleicht aus dem Titel abgeleitet haben, ist wirklich zwei Fragen in einem.Muss ich HTTP/2.0 verwenden, um Apple Push-Benachrichtigungen zu senden? Darf ich libcurl benutzen?

Erste Frage: Muss ich HTTP/2.0 verwenden, um Apple Push Notifications zu senden?

Auf den APNs Provider API documentation von Apple zur Verfügung gestellt, gibt die Eröffnung Absatz

Diese API auf dem HTTP/2-Netzwerk-Protokoll basiert.

Es gibt mehrere andere Verweise auf HTTP/2.0 in der gesamten Dokumentation. Allerdings sehe ich nicht (was nicht zu sagen ist, dass es nicht da ist) irgendetwas, das angibt, dass HTTP/2.0 verwendet werden muss. Bedeutet das, dass ich irgendeine HTTP-Version verwenden darf? Oder bin ich tatsächlich auf HTTP/2.0 beschränkt?

Ich bin sehr vertraut mit HTTP/1.1, aber ich weiß fast nichts über HTTP/2.0, also wenn ich in der Lage bin, mein altes vertrautes Protokoll zu verwenden, würde ich das bevorzugen.

Zweite Frage (basierend auf der ersten Frage): Darf ich libcurl mit APNs verwenden?

Diese Frage ist nur relevant, wenn die erste Frage bejaht wird. Wenn es nicht wahr ist, dass ich HTTP/2.0 mit APNs verwenden muss, dann weiß ich bereits, dass ich libcurl verwenden kann.

Ich werde viele APNs von einem bereits ausgelasteten Server senden, und ich würde es lieber nativ machen - daher plane ich, wenn möglich, libcurl zu verwenden. Allerdings verstehe ich, dass libcurl etwas eingeschränkt ist, wenn es um HTTP/2.0 geht.

Das Hauptproblem ist, dass, wenn libcurl eine HTTP/2.0-Verbindung herstellt, es tatsächlich mit einer HTTP/1.1-Anfrage beginnt, die einen upgrade-Header enthält und dann auf eine 101 Switching Protocols Statuszeile wartet. Wird dieses Verhalten mit APNs unterstützt? Oder muss ich versuchen, etwas wie nghttp2 zu verwenden?

Ich habe festgestellt, dass nghttp2 ist etwas komplex und sehr schlecht dokumentiert im Moment. Ich bin besorgt, dass, wenn ich nicht libcurl verwenden kann, ich am Ende HTTP/2.0 auf eigene Faust mit Sockets (die DIE WORST wäre) implementieren würde.

Jede Hilfe wird für beide Fragen geschätzt! Dank euch allen!

+0

curl die Befehlszeile ist gut für dieses Szenario mit HTTP/2. Verwenden Sie einfach die Option --http2 und und https: // url. Also, es muss einen Weg geben, auf dem Sie libcurl auch dazu bringen können, sich zu verhalten .... – dsign

+0

HTTP/2 über eine normale HTTP: // URL, wo wir nicht wissen, welche Version es spricht, wird typischerweise mit Upgrade durchgeführt: HTTPS: // ist anders gemacht. libcurl _will_ erhält eventuell auch die vorherige HTTP2-Unterstützung und Sie können uns gerne bei der Implementierung helfen. –

+0

@DanielStenberg Ich wäre eigentlich daran interessiert zu helfen. Das hört sich witzig an. Wie könnte ich mich engagieren? –

Antwort

6

OK nach einer langen Zeit habe ich endlich die Antwort gefunden. Ja, HTTP/2 ist erforderlich, APNS zu verwenden.

Es kommt auf eine einzige Zeile in the APNS docs die

APNs erfordert die Verwendung von HPACK (Header-Komprimierung für HTTP/2) sagt, die Schlüssel und Werte Header wiederholt verhindert.

was bedeuten würde, dass HTTP/2 ein erforderlicher Teil des Protokolls ist.

3

Wie es jetzt steht, unterstützt Apple immer noch seine ältere v2 (binäre) API, die über HTTPS funktioniert, also ist HTTP/2 nur erforderlich, wenn Sie die neueste API verwenden möchten.

Die Legacy-API ist in einem Anhang dokumentiert, aber im Vergleich zur HTTP/2-API ist es so schrecklich, dass ich die Verwendung nicht empfehlen kann.

Ich kann mit Sicherheit sagen, dass die Legacy-API unterstützt wird, da ich Produktionscode habe, der sie gerade verwendet (das ist auch der Grund, warum ich sagen kann, dass die API schrecklich ist und ich sie auf HTTP/2 migriere) .

+0

Migrieren Sie zu dem neuen HTTP/2 API? Wenn ja, dann lassen Sie mich bitte einige Fragen dazu stellen. Ich mache auch das gleiche – RamshaS