NSURLConnection en iOS 9 no usa el protocolo HTTP / 2

Configuré HTTP / 2 en un server Jetty 9.3, tiene un certificate válido y SSLLabs.com le otorgó una configuration de security de grado A.

Navegar usando Chrome a https://example.com carga la respuesta correcta, también informa que se utilizó el protocolo "h2" (HTTP / 2 ").

Pero cuando bash acceder a la misma URL desde iOS 9 usando NSURLConnection , puedo ver en el logging de requestes que usó HTTP 1.1 en su lugar. Si inhabilito HTTP 1.1 en mi server, la request fallará en iOS 9 (pero seguirá teniendo éxito en Chrome).

Código de connection 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) 

Salida de debugging ALPN del server:

 [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] 

En WWDC 2015 se indicó que NSURLRequest en iOS 9 es compatible con HTTP / 2, pero la aplicación cliente afirma que es compatible con spdy/3.1, spdy/3, http/1.1 , no http/2 . No se han NSAppTransportSecurity excepciones NSAppTransportSecurity .

Intenté conectarme al server usando Safari en el mismo iPhone Simulator ejecutando la aplicación, esta vez funcionó y usé HTTP / 2, aquí está la salida de debugging ALPN:

 [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] 

¿Alguna idea de por qué no usa HTTP / 2 desde la aplicación?

HTTP / 2 solo es compatible con NSURLSession . NSURLConnection ha quedado en desuso en iOS 9. Aquí está la reference del encabezado:

introduzca la descripción de la imagen aquí

NSURLConnection está en desuso en iOS9, usa NSURLSession es compatible con el protocolo HTTP / 2. 😉

    Intereting Posts