暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

为HttpClient开启HTTP/2

chester技术分享 2023-04-29
434

.Net Core在调用其他服务时,调用通常使用HttpClient,而HttpClient默认使用HTTP/1.1

配置 HttpClient 以使用 HTTP/2 h2 连接

自 .NET Core 3.0 发布以来, .NET 开发人员可以使用 HttpClient 启用 HTTP/2

设置 HTTP/2 的方法

DefaultRequestVersionDefaultVersionPolicy选项在HttpClient对象本身上可用。这些属性将应用于通过常规 HttpClient 方法(如GetAsyncPostAsyncPatchAsyncPutAsync )完成的所有请求。

 

直接设置

    var client = new HttpClient();
    client.DefaultRequestVersion = HttpVersion.Version20;
    client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower;


    DI

      builder.Services.AddHttpClient("h2multiconnnections", httpclient =>
      {
      httpclient.DefaultRequestVersion = HttpVersion.Version20;
      httpclient.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower;
      })


      HTTPRequestMessage

      如果您使用SendSendAsync方法,您必须在其中传递HttpRequestMessage的实例,则需要在 HttpRequestMessage 实例上设置VersionVersionPolicy属性。

        var request = new HttpRequestMessage(HttpMethod.Post, url);
        request.Version = HttpVersion.Version20;
        request.VersionPolicy = HttpVersionPolicy.RequestVersionOrLower;
        var response = await _client.SendAsync(request);

        配置 HttpClient 以使用 HTTP/2 的多个连接

        在 .NET 5.0 和 .NET 6.0 中,HttpClient 默认配置为仅打开 1 个到 HTTP/2 服务器的连接。另外,最大并发流数的推荐值为100。

        在某些情况下,出于性能原因,如果您在短时间内发送数千个请求,则可能需要与服务器建立 1 个以上的连接。出于这个原因,在 .NET 5.0 中,MicrosoftSocketsHttpHandler类上引入了EnableMultipleHttp2Connections属性,使开发人员能够根据需要更改默认行为。

          builder.Services.AddHttpClient("h2multiconnnections", httpclient =>
          {
          httpclient.DefaultRequestVersion = HttpVersion.Version20;
          httpclient.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower;
          })
          .ConfigurePrimaryHttpMessageHandler(() =>
          new SocketsHttpHandler
          {
          EnableMultipleHttp2Connections = true
          });

          HTTP/3

          在 .NET 6 中,HTTP/3 可作为预览功能使用,因为 HTTP/3 规范尚未最终确定。带有 .NET 6 的 HTTP/3 中可能存在行为或性能问题。

          https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-6#http3

          https://learn.microsoft.com/zh-cn/dotnet/core/extensions/httpclient-http3


          https://www.siakabaro.com/use-http-2-with-httpclient-in-net-6-0/


          关注我获取技术分享

          文章转载自chester技术分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论