Ho configurato HTTP/2 su un server Jetty 9.3, ha un certificato valido e SSLLabs.com gli ha fornito una configurazione di sicurezza di grado A.NSURLConnection su iOS 9 non utilizza il protocollo HTTP/2
Navigando usando Chrome per https://example.com carichi la risposta corretta, è anche la segnalazione che "H2" (HTTP/2"), il protocollo è stato utilizzato.
Ma quando si tenta di accedere allo stesso URL da iOS 9 utilizzando NSURLConnection
, ho può vedere nel log richiesta che ha usato HTTP 1.1 invece se disattivo HTTP 1.1 sul mio server, la richiesta avrà esito negativo su iOS 9 (ma ancora avere successo su Chrome)
NSURLConnection -..
let url = NSURL(string: "https://example.com")
request = NSURLRequest(URL: url, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 10)
connection = NSURLConnection(request: request, delegate: self, startImmediately: true)
ALPN del server output di debug -
[S] ALPN protocols [spdy/3.1, spdy/3, http/1.1] received from client for 1e5e2487[SSLEngine[hostname=3.4.5.6 port=52090] SSL_NULL_WITH_NULL_NULL]
[S] ALPN protocol 'http/1.1' selected for 1e5e2487[SSLEngine[hostname=3.4.5.6 port=52090] SSL_NULL_WITH_NULL_NULL]
In WWDC 2015 si è affermato che NSURLRequest in iOS 9 supporta HTTP/2, ma l'applicazione client afferma di sostenere spdy/3.1, spdy/3, http/1.1
, non http/2
. Non sono state impostate le eccezioni NSAppTransportSecurity
.
ho provato la connessione al server utilizzando Safari sullo stesso iPhone Simulator in esecuzione l'applicazione, questa volta ha funzionato e HTTP/2 utilizzati, ecco ALPN di debug uscita -
[S] ALPN protocols [h2, h2-16, h2-15, h2-14, spdy/3.1, spdy/3, http/1.1] received from client for 7b50217d[SSLEngine[hostname=3.4.5.6 port=52247] SSL_NULL_WITH_NULL_NULL]
[S] ALPN protocol 'h2' selected for 7b50217d[SSLEngine[hostname=3.4.5.6 port=52247] SSL_NULL_WITH_NULL_NULL]
Tutte le idee perché non è così utilizzare HTTP/2 dall'interno dell'app?
E 'supportato solo da 'NSURLSession'. – HAS
Correggi, posta questo come risposta. :) – Kof