为HttpClient开启HTTP/2

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

为HttpClient开启HTTP/2

 

 

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

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

为HttpClient开启HTTP/2

 

设置 HTTP/2 的方法

DefaultRequestVersion和DefaultVersionPolicy选项在HttpClient对象本身上可用。这些属性将应用于通过常规 HttpClient 方法(如GetAsync、PostAsync、PatchAsync或PutAsync )完成的所有请求。

 

直接设置

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

如果您使用Send或SendAsync方法,您必须在其中传递HttpRequestMessage的实例,则需要在 HttpRequestMessage 实例上设置Version和VersionPolicy属性。

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 中,Microsoft在SocketsHttpHandler类上引入了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/

原文链接:https://www.cnblogs.com/chenyishi/p/17361557.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:为HttpClient开启HTTP/2 - Python技术站

(0)
上一篇 2023年5月5日
下一篇 2023年5月5日

相关文章

  • c#中判断字符串是不是数字或字母的方法

    在C#中,判断字符串是否为数字或字母,可以使用正则表达式或字符操作方法。 使用正则表达式 使用正则表达式可以方便地检验一个字符串是否符合某种格式,例如是否只包含数字或字母。 using System.Text.RegularExpressions; string str = "Hello1234"; bool isDigitOrLette…

    C# 2023年6月8日
    00
  • C# Main方法的传入参数研究

    C# Main方法的传入参数研究 什么是Main方法 在C#语言中,Main方法是程序的入口点。当程序启动时,将会首先执行Main方法。 Main方法通常定义在最高级别的类中,并且是一个静态方法。其语法如下: static void Main(string[] args) { } 其中,string[] args参数用于接收命令行参数。下面我们将详细说明如何…

    C# 2023年6月7日
    00
  • 猜数字小游戏C#实现代码

    下面我来详细讲解一下“猜数字小游戏C#实现代码”的完整攻略。 猜数字小游戏C#实现代码 猜数字小游戏是一款经典的小游戏,本文将介绍如何使用C#语言来实现这个小游戏,并提供完整的代码示例和详细的解释。 程序思路 猜数字小游戏的规则非常简单:计算机随机生成一个数字,玩家需要猜测这个数字是多少。如果玩家猜错了,计算机会根据猜测的数字给出一些提示,例如“猜的数字太小…

    C# 2023年6月6日
    00
  • 在.NET中扫描局域网服务的实现方法

    下面是关于“在.NET中扫描局域网服务的实现方法”的完整攻略,包含两个示例。 1. 局域网服务扫描简介 在局域网中,我们可能需要扫描网络中的服务,以便找到可用的服务。在.NET中,我们可以使用Socket类和UDP协议来实现局域网服务扫描。以下是.NET中局域网服务扫描的详细介绍。 2. 局域网服务扫描全攻略 以下是使用.NET中Socket类和UDP协议实…

    C# 2023年5月15日
    00
  • 详解java中import的作用

    在Java中,import关键字用于导入其他类或接口的定义,以便在当前类中使用。本文将详细介绍Java中import的作用,包括import的语法、使用方法和注意事项等。 import的语法 在Java中,import关键字的语法如下: import package.name.ClassName; 其中,package.name是要导入的类或接口所在的包名,…

    C# 2023年5月15日
    00
  • C#自动类型转换与强制类型转换的讲解

    我来详细讲解一下C#中的自动类型转换和强制类型转换。 自动类型转换 自动类型转换是指C#在程序运行时根据需要自动将一个数据类型转换为另一个数据类型,也称为隐式类型转换。自动类型转换规则如下: 将一个小范围类型的值赋给大范围类型的变量时,会发生自动转换。例如,将int类型的值赋值到long类型的变量中。 将一种不同的数据类型赋给另一种数据类型时,会进行自动转换…

    C# 2023年5月15日
    00
  • php里array_work用法实例分析

    PHP里array_walk的用法实例分析 在PHP中,array_walk是一个非常重要并且常用的数组操作函数,用于对数组中的每个元素应用用户自定义的函数callback。 array_walk基础用法 array_walk函数有两个必填参数,分别是待处理的数组和要应用到每个元素的callback函数。callback函数接受两个参数,分别是当前元素的值和…

    C# 2023年6月7日
    00
  • C#基于TCP实现简单游戏客户端的完整实例

    下面我将为你详细讲解基于TCP实现简单游戏客户端的完整攻略。 一、前置准备 在开始实现前需要做以下几个准备工作: 安装并配置好C#程序开发环境,比如Visual Studio等。 确认游戏协议,即确定游戏客户端和服务器之间的通信方式和数据格式,一般采用二进制流。 确认游戏场景和角色设定,确定游戏客户端和服务器需要交互的数据类型和具体实现方式。 熟悉Socke…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部