web-dev-qa-db-ja.com

.NET HttpClientでHTTP 2.0を使用する方法は?

IIS 10(Windows Server 2016))でホストされているasp.net Web APIがあります。MicrosoftEdgeブラウザーからGET要求を行うと、HTTP 2.0はIISログで使用されます

2015-09-20 21:57:59 100.76.48.17 GET /RestController/Native - 443 - 73.181.195.76 HTTP/2.0 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/42.0.2311.135+Safari/537.36+Edge/12.10240 - 200 0 0 7299

ただし、以下のようにGETリクエストが 。net 4.6クライアント を介して行われた場合、

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("https://myapp.cloudapp.net/");

    HttpResponseMessage response = await client.GetAsync("RestController/Native");
    if (response.IsSuccessStatusCode)
    {
        await response.Content.CopyToAsync(new MemoryStream(buffer));
    }
}

サーバーログに次のHTTP 1.1ログが表示されます

2015-09-20 20:57:41 100.76.48.17 GET /RestController/Native - 443 - 131.107.160.196 HTTP/1.1 - - 200 0 0 707

.netクライアントにHTTP/2.0を使用させるにはどうすればよいですか?

16
tcb

HttpClientはまだHTTP/2をサポートしていません。次のリリースで利用できるようになります(コード名KATANA)。 次のリリースのソースコードへのリンク です。

それまでは、HTTP/2を実装する独自のHttpMessageHandlerオブジェクトを実装し、それをHttpClientのコンストラクターに渡すことができました(おそらく、カタナのソースコードを使用できます)。

6
Racil Hilan

1 .最新バージョンのWindows 1を使用していることを確認します。

2.インストールWinHttpHandler

Install-Package System.Net.Http.WinHttpHandler

3. WinHttpHandlerを追加してhttp2.サポートを追加:

public class Http2CustomHandler : WinHttpHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    {
        request.Version = new Version("2.0");
        return base.SendAsync(request, cancellationToken);
    }
}

4.ハンドラーをHttpClientコンストラクターに渡す

using (var httpClient = new HttpClient(new Http2CustomHandler()))
{
      // your custom code
}
23

HTTP/2は、.NET 4.6.2でのC#クライアント呼び出しでサポートされるように見えます

https://msdn.Microsoft.com/en-us/library/ms171868(v = vs.110).aspx

HTTP/2サポート(Windows 10)

HTTP/2はHTTPプロトコルの新しいバージョンであり、はるかに優れた接続利用率(クライアントとサーバー間の往復回数の減少)を提供し、ユーザーのWebページの読み込みの待ち時間を短縮します。プロトコルは単一のエクスペリエンスの一部として要求される複数のアーティファクトに対して最適化されるため、Webページ(サービスではなく)はHTTP/2から最も恩恵を受けます。 HTTP/2サポートが.NET Framework 4.6のASP.NETに追加されました。ネットワーク機能は複数の層に存在するため、HTTP/2を有効にするには、Windows、IIS、およびASP.NETで新しい機能が必要でした。 ASP.NETでHTTP/2を使用するには、Windows 10で実行する必要があります。

System.Net.Http.HttpClient APIを使用するWindows 10ユニバーサルWindowsプラットフォーム(UWP)アプリでは、HTTP/2もデフォルトでサポートされています。

3
Oliver