7

Questa domanda, come puoi dedurre dal titolo, è in realtà due domande in una.Devo utilizzare HTTP/2.0 per inviare notifiche push Apple? Posso usare libcurl?

Prima domanda: È necessario utilizzare HTTP/2.0 per inviare notifiche push Apple?

Sulla APNs Provider API documentation fornito da Apple, il paragrafo di apertura specifica

Questa API è basata sul protocollo di rete HTTP/2.

Ci sono molti altri riferimenti a HTTP/2.0 in tutta la documentazione. Tuttavia non vedo (il che non vuol dire che non sia lì) qualcosa che specifica che HTTP/2.0 deve essere utilizzato. Questo significa che posso utilizzare qualsiasi versione HTTP? O sono effettivamente limitato a HTTP/2.0?

Ho molta familiarità con HTTP/1.1 ma non conosco quasi nulla di HTTP/2.0, quindi se sono in grado di utilizzare il mio vecchio protocollo familiare preferirei quello.

Seconda domanda (basata sulla prima domanda): Posso utilizzare libcurl con gli APN?

Questa domanda è pertinente solo in risposta affermativa alla prima domanda. Se non è vero che devo usare HTTP/2.0 con gli APN, so già che posso usare libcurl.

Invierò molti APN da un server già occupato e preferirei farlo in modo nativo, quindi ho intenzione di utilizzare libcurl se possibile. Tuttavia capisco che libcurl è alquanto limitato quando si tratta di HTTP/2.0.

Il problema principale è che quando libcurl effettua una connessione HTTP/2.0, in realtà inizia con un/1.1 richiesta HTTP che include un header upgrade, e quindi attende una linea 101 Switching Protocols di stato. Questo comportamento è supportato con gli APN? O devo provare ad usare qualcosa come nghttp2?

Ho trovato che nghttp2 è un po 'complesso e molto scarsamente documentato al momento. Sono preoccupato che se non riesco a usare libcurl, potrei finire per dover implementare HTTP/2.0 da solo usando i socket (che sarebbe IL PEGGIO).

Qualsiasi aiuto è apprezzato per entrambe le domande! Grazie a tutti!

+0

arricciare la riga di comando è buona per questo scenario con HTTP/2. Basta usare l'opzione --http2 e https: // url. Quindi, ci deve essere un modo in cui puoi anche fare il comportamento di libcurl .... – dsign

+0

HTTP/2 fatto su un normale HTTP: // URL dove non sappiamo quale versione parla normalmente con Upgrade: HTTPS: // è fatto diversamente Alla fine, libcurl _will_ otterrà anche il supporto HTTP2 di conoscenza preliminare e saremo lieti di aiutarci a implementarlo. –

+0

@DanielStenberg Sarei davvero interessato ad aiutare. Questo sembra divertente. Come potrei essere coinvolto? –

risposta

6

OK, dopo un bel po 'di tempo ho finalmente trovato la risposta. Sì, HTTP/2 è richiesto per utilizzare APNS.

Si tratta di una singola riga the APNS docs che dice

APN richiede l'uso di HPACK (compressione intestazione HTTP/2), che impedisce ripetuto chiavi e valori di intestazione.

che implicherebbe che HTTP/2 è una parte necessaria del protocollo.

3

Allo stato attuale, Apple supporta ancora l'API legacy v2 (binary), che funziona su HTTPS, quindi HTTP/2 è richiesto solo se si desidera utilizzare l'ultima API.

L'API legacy è documentata in un'appendice, ma onestamente, rispetto all'API HTTP/2, è così orribile che non potrei raccomandare di usarlo.

Posso dire con certezza che l'API legacy è supportata perché ho un codice di produzione che lo sta usando in questo momento (questo è anche il motivo per cui posso dire che l'API è orribile, e sono impegnato a migrarlo su HTTP/2) .

+0

Passi al nuovo HTTP/2 API? Se sì, per favore lasciatemi fare alcune domande al riguardo. Anche io sto facendo lo stesso – RamshaS