7

Jetty 9.3 サーバーで HTTP/2 を構成しました。有効な証明書と SSLLabs.com があり、グレード A のセキュリティ構成が適用されています。

Chrome を使用してhttps://example.comを参照すると、正しい応答が読み込まれ、"h2" (HTTP/2") プロトコルが使用されたことが報告されます。

しかし、iOS 9 から を使用して同じ URL にアクセスしようとすると、NSURLConnection代わりに HTTP 1.1 を使用したことが要求ログに表示されます。サーバーで HTTP 1.1 を無効にすると、iOS 9 でリクエストが失敗します (Chrome では成功します)。

NSURL接続コード -

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 デバッグ出力 -

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

WWDC 2015 では、iOS 9 の NSURLRequest は HTTP/2 をサポートすると述べられていましたが、クライアント アプリはサポートspdy/3.1, spdy/3, http/1.1していないと主張していhttp/2ます。NSAppTransportSecurity例外は設定されていません。

アプリを実行している同じiPhoneシミュレーターでSafariを使用してサーバーに接続しようとしましたが、今回は機能し、HTTP/2を使用しました。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]

アプリ内から HTTP/2 を使用しない理由はありますか?

4

2 に答える 2

13

HTTP/2は でのみサポートされていNSURLSessionます。NSURLConnectionは iOS 9 で廃止されました。ヘッダーからの参照は次のとおりです。

ここに画像の説明を入力

于 2015-07-06T06:44:56.280 に答える
0

NSURLConnectionは iOS9 で廃止されましたNSURLSession。HTTP/2 プロトコルをサポートするものを使用してください。;)

于 2015-07-06T06:42:48.343 に答える