NSURLSessionDownloadTask cambiar de http a https

Tengo un AFHTTPSessionManager creado NSURLSessionDownloadTask se utiliza para download un video dentro de una aplicación que a veces cuando se inicializa con una URL http: 80 lo convertirá a https: 443. Esto sucede antes de que se realice cualquier bash de connection (agregué una class de protocolo HTTP personalizado mediante NSURLSessionConfiguration a la session para iniciar session cuando se realiza la connection).

Para cuando la request llegue a la

 -(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request networkingirectResponse:(NSURLResponse *)response 

delegate method de mi class CustomHTTPProtocolDelegate, la request se ha cambiado a https.

La security de transporte de la aplicación está deshabilitada ( NSAllowsArbitraryLoads=true ) y este comportamiento parece estar asociado con un server particular de solo http (otro server de solo http no tiene ningún problema y la connection se realiza como http en el puerto 80).

¿Alguna idea de lo que podría estar pasando? ¿Algo más que podría hacer para depurar?

Aquí es cómo se crea la tarea de descarga (incluida la class de protocolo personalizado de debugging):

  NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSessionConfiguration* config = [NSURLSessionConfiguration ephemeralSessionConfiguration]; config.protocolClasses = @[[CustomHTTPProtocol class]]; AFHTTPSessionManager *session = [[AFHTTPSessionManager manager] initWithSessionConfiguration:config]; self.downloadTask = [session downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response){ 

[ACTUALIZACIÓN] Este problema nos está causando una gran cantidad de dolores de cabeza, por lo que para facilitar la resolución de problemas, he creado un pequeño proyecto de testing para ayudar a networkingucir el problema. Mi proyecto simple hace dos cosas, carga una url en una UIWebView y descarga un file usando NSURLSessionDownloadTask. Las URL para estas acciones siguen este patrón: URL de WebView: https://console.company.com/home.html URL de descarga: http://data.company.com/file.txt Y esos nombres de host se resuelven en diferentes direcciones IP (diferentes serveres)

Si descargo el file antes de navegar por la vista web, todo está bien, pero si la vista web carga su URL primero, la URL de descarga se cambiará a HTTPS automáticamente y la request inicial de datos fallará. Una idea que tuvimos fue que una vez que iOS abre un túnel TLS para la connection HTTPS que está creando la vista web, intenta usar ese mismo túnel para todas las conexiones * .company.com subsiguientes. O como mínimo, asume que todas las conexiones * .company.com también deben ser TLS.

Lo imaginé. Ambos serveres enviaron un encabezado HSTS para todos los subdominios. Debido a que la capa de networking en NSURLSession observa este encabezado, las llamadas al server HTTP se actualizaban a HTTPS antes de abandonar el cliente.