首页 > 其他分享 >为HttpClient开启HTTP/2

为HttpClient开启HTTP/2

时间:2023-04-28 11:13:38浏览次数:45  
标签:HTTP 开启 HttpVersion HttpClient NET httpclient DefaultVersionPolicy

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

 

 

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

自 .NET Core 3.0 发布以来, .NET 开发人员可以使用 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/

标签:HTTP,开启,HttpVersion,HttpClient,NET,httpclient,DefaultVersionPolicy
From: https://www.cnblogs.com/chenyishi/p/17361557.html

相关文章

  • golang常用的http请求操作
    之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的通过golang发起的GET请求以及POST请求的代码例子golang发起GET请求基本的GET请求//基本的GE......
  • questions_02:【KeyError: 'mobile_phone'[27/Apr/2023 21:42:21] "POST /register/ H
    BUG在成功注册之后,如果填写相同的信息,会报出一个【KeyError:'mobile_phone'[27/Apr/202321:42:21]"POST/register/HTTP/1.1"50086526】的bug,原因是我们的cleaned_data中的数据是按照fields中的顺序去校验成功之后添加的,所以当出现相同的数据时候cleaned_data前面几个字......
  • HTTP常见状态码
    1开头1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。代码说明100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。2开头2xx(成功)表示......
  • 001使用HTTPS协议设置免密码提交代码
    一、store模式:将凭证用明文的形式存放在磁盘“home”目录下(默认是“~/.git-credentials”),永不过期,除非手动修改在Git服务器上的密码,否则永远不需要再次输入凭证信息。“git-credentials”文件内容如下:https://username:password@***********.com保存退出后,执行如下命令即可......
  • 解决docker in docker http推送问题
    FROMdocker:18.09-dindENVDOCKER_HOST=unix:///var/run/docker.sockADD./main/bin/RUNmkdir-p/etc/docker&&echo-e'{"insecure-registries":["ip:5000"]}'>/etc/docker/daemon.jsonENTRYPOINT["/usr/local/......
  • vscode 开启html代码自动补全
    divvscode提供了Emmet语法来进行一些代码补全操作,需要在设置中加入"emmet.triggerExpansionOnTab":true即可.打开文件->首选项->设置打开设置界面,    点击右上角的打开设置(json),添加进去就可以,然后我们输入div,按两次Tab键就可以看到自动补全了<div></di......
  • https生成证书
    进入jdk安装目录,运行cmd命令行窗口,使用keytool命令生成证书为服务端生成证书keytool-genkey-v-aliastomcat-keyalgRSA-keystoretomcat.keystore-validity36500命令参数介绍:keytool-genkey-aliastomcat(别名)-keypass123456(别名密码)-keyalgRSA(算法)-......
  • RAC中多实例开启归档和闪回
    下面是针对其中一个实例的步骤记录注意事项:0、参数修改只在一个节点执行即可,记得sid='*'1、每个实例需切换环境变量2、开归档需先关闭DB再mount来开启3、闪回区开启需先设置大小再设置位置以下操作只在节点1执行1、设置环境变量、关闭DB之前先设置下归档路径[oracle@mydb1~]\$......
  • HTTP重定向
    基本含义在HTTP请求服务中,服务器可以通过返回一个状态码为3xx的重定向响应来告知调用方(通常是浏览器)当前访问的链接需要进行重定向访问,响应头中会带有一个Location字段,注明重定向后的目的地址。浏览器接收到这个重定向响应后,会访问Location中指定的链接。 用户对于这个......
  • http请求方式
    http最大的作用就是确定了请求和响应数据的格式。常见的请求方式:get 方法发送一个请求来取得服务器上的某一资源。post方法向url指定的资源提交数据或附加新的数据。put方法put方法跟post方法很像,也是向服务器提交数据,但是put方法指向了资源在服务器上的位置......