.NET 6 中的HTTP 3支持

dotnet团队官方博客发布了一篇HTTP3的文章:HTTP/3 support in .NET 6:https://devblogs.microsoft.com/dotnet/http-3-support-in-dotnet-6/。文章介绍了.NET 6 将预览支持HTTP3,.NET 7正式支持HTTP3,原因主要是HTTP/3 的 RFC 尚未最终确定,因此仍然可以更改,并且在 .NET 6 中,HTTP/3 可能存在行为或性能问题。将 HTTP/3 包含在 .NET 6 中,可以开始尝试它。

HTTP/3 是 HTTP 的第三个即将发布的主要版本。HTTP/3 使用与 HTTP/1.1 和 HTTP/2 相同的语义:相同的请求方法、状态代码和消息字段适用于所有版本。差异在于基础传输。HTTP/1.1 和 HTTP/2 都将 TCP 用作其传输协议。HTTP/3 使用的是与 HTTP/3 同时开发的一种新传输技术,称为 QUIC。

与 HTTP/1.1 和 HTTP/2 相比,HTTP/3 和 QUIC 具有很多优势:

  • 第一个请求的响应时间更短。QUIC 和 HTTP/3 在客户端和服务器之间以较少的往返次数协商连接。第一个请求更快地到达服务器,QUIC 使用 UDP 并内置 TLS,因此,当 TLS 握手作为连接的一部分发生时,建立连接会更快。

  • 改进了发生连接数据包丢失时的体验。HTTP/2 通过一个 TCP 连接多路复用多个请求。如果在连接时发生数据包丢失,会影响所有请求。这个问题称为“队头阻塞”。由于 QUIC 提供本机多路复用,因此丢失的数据包只会影响已丢失数据的请求,因此在数据包丢失的情况下,它不再具有队头阻塞。

  • 支持在网络之间转换。此功能对于移动设备非常有用,因为在移动设备更改位置时,在 WIFI 和移动电话网络之间切换是很常见的。目前,在切换网络时,HTTP/1.1 和 HTTP/2 连接会失败并提示错误。应用或 Web 浏览器必须重试任何失败的 HTTP 请求。HTTP/3 让应用或 Web 浏览器在网络发生更改时可以无缝地继续。不过 Kestrel 并不支持 .NET 6 中的网络转换。它可能在未来版本中可用。

9fbed9b449233c64f7ee97cb24e9db85.png

.NET的QUIC 支持

QUIC被设计为 HTTP/3 的基础传输层,但它也可用于其他协议。它设计为适用于具有处理网络更改能力的移动设备,并在发生数据包丢失时具有良好的恢复能力。在. NET 6 中并没有公开.NET QUIC API,目标是在.NET 7 中公开它们。QUIC 可以像 TCP Socket 一样使用,并不是特定于 HTTP/3,因此我们预计随着时间的推移,其他协议将建立在 QUIC 上,例如QUIC 上的 SMB。

.NET 6 的 HTTP/3 支持

HTTP/3 支持处于预览版状态,因此默认情况下没有启用。由于并非所有路由器、防火墙和代理都能正确地支持 HTTP/3,建议将 HTTP/3 与 HTTP/1.1 和 HTTP/2 一起配置。可通过将 HttpProtocols.Http1AndHttp2AndHttp3 指定为终结点支持的协议来完成此操作。HTTP/3 将 QUIC 用作其传输协议。HTTP/3 的 .NET 实现使用 MsQuic 来提供 QUIC 功能。MSQuic 包含在 Windows 的特定版本中,并作为 Linux 的一个库。如果 Kestrel 所运行的平台没有满足 HTTP/3 的所有要求,则它会被禁用。

例如,HttpProtocols.Http1AndHttp2AndHttp3 允许 Kestrel 在支持 HTTP/3 的环境中启用 HTTP/3,并对 HTTP/1.1 和 HTTP/2 进行回退。

Windows

  • Windows 11 内部版本 22000 或更高版本和Server 2022 RTM。

  • TLS 1.3 或更高版本的连接。

上述 Windows 11 内部版本可能需要使用 Windows 预览体验成员内部版本

Linux

在 Linux 上,libmsquic 是通过 Microsoft 官方 Linux 包存储库 packages.microsoft.com 发布的。为了使用它,必须手动添加。请参阅 Microsoft 产品的 Linux 软件存储库。添加 libmsquic 后,可以通过发行版的包管理器安装它,例如,对于 Ubuntu:

sudo apt install libmsquic

macOS

HTTP/3 目前在 macOS 上不受支持,主要是因为缺少与 QUIC 兼容的 TLS API。它可能在未来版本中可用。

Alt-svc

HTTP/3 是通过 alt-svc 标头作为从 HTTP/1.1 或 HTTP/2 的升级发现的。这意味着,在切换到 HTTP/3 之前,第一个请求通常使用 HTTP/1.1 或 HTTP/2。如果启用了 HTTP/3,则 Kestrel 会自动添加 alt-svc 标头。

入门

HTTP/3 是在应用启动时配置的。下面的代码:

  • 将 WebHost 配置为 UseQuic

  • 配置端口 5001 以使用 HttpProtocols.Http1AndHttp2AndHttp3

首先要启用预览版特性,添加下列项目属性
<PropertyGroup><EnablePreviewFeatures>True</EnablePreviewFeatures>
</PropertyGroup>
public static async Task Main(string[] args)
{var builder = WebApplication.CreateBuilder(args);builder.WebHost.ConfigureKestrel((context, options) =>{options.Listen(IPAddress.Any, 5001, listenOptions =>{// Use HTTP/3listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;listenOptions.UseHttps();});});
}

HTTP/3 Client

HttpClient 已更新,以包括对 HTTP/3 的支持,但它需要启用运行时标记。在项目文件中包括以下内容,以便 HTTP/3 与 HttpClient 配合使用:

<ItemGroup><RuntimeHostConfigurationOption Include="System.Net.SocketsHttpHandler.Http3Support" Value="true" />
</ItemGroup>

使用 HttpClient 进行 HTTP/3 请求时,需要额外的配置:

  • 将 HttpClient .DefaultRequestVersion设置为 3.0,或者

  • 将 HttpClient .DefaultVersionPolicy设置为 HttpVersionPolicy.RequestVersionExact

// See https://aka.ms/new-console-template for more information
using System.Net;var client = new HttpClient();
client.DefaultRequestVersion = HttpVersion.Version30;
client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact;var resp = await client.GetAsync("https://localhost:5001/");
var body = await resp.Content.ReadAsStringAsync();Console.WriteLine($"status: {resp.StatusCode}, version: {resp.Version}, body: {body.Substring(0, Math.Min(100, body.Length))}");

gRpc over HTTP3

gRPC 通常使用 HTTP/2 作为传输工具。HTTP/3 使用相同的语义,因此几乎不需要任何更改就能使其工作。由 .NET 团队提出 HTTP/3 的 gRPC 尚未成为标准:https://github.com/grpc/proposal/pull/256。

.NET 团队将在.NET 7 中进一步开发 QUIC 和 HTTP/3,因此期待在预览过程中得到更新的功能。

相关文章:

  • https://devblogs.microsoft.com/dotnet/http-3-support-in-dotnet-6/

  • https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/http3?view=aspnetcore-6.0

  • asp.net core 6 新特性,支持HTTP/3 端点发布

  • 关于.Net 6 中 Quic

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lock与synchronized 的区别

2019独角兽企业重金招聘Python工程师标准>>> 多次思考过这个问题&#xff0c;都没有形成理论&#xff0c;今天有时间了&#xff0c;我把他总结出来&#xff0c;希望对大家有所帮助 1、ReentrantLock 拥有Synchronized相同的并发性和内存语义&#xff0c;此外还多了 …

linux 内核 三天吐血,编译安装——吐血经验,内附脚本

程序包编译安装&#xff1a;源码包&#xff1a;name-VERSION-release.src.rpmrpm由源码包安装后&#xff0c;使用rpmbuild命令制作成二进制格式的rpm包&#xff0c;而后再安装源代码–> 预处理–> 编译(gcc)–> 汇编–> 链接–> 执行源代码组织格式&#xff1a;…

mac编辑器coda使用小贴条

前言&#xff1a;最近用mac开发环境了&#xff0c;自然一天到晚用coda&#xff0c;可总是有不顺的地方&#xff0c;搜到这篇文章感觉像看到了知音人&#xff0c;实在是解决了我不少疑难问题啊。外文针对的coda版本较低&#xff0c;我总结的针对版本是version1.7.3 coda快捷键操…

我在 GitHub 上发现了一款骚气满满的字体!

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;量子位&#xff0c;作者&#xff1a;栗体这个字体叫 Leon Sans&#xff0c;表面看去平平无奇。但事实上&#xff0c;它并不是普通的字体&#xff0c;体内蕴藏着魔力。Leon Sans 最特别的地方在于&#xff0c;字体是由代码…

PHP 接收 UDP包_php只能做网站?基于swoole+websocket开发双向通信应用

前言众所周知&#xff0c;PHP用于开发基于HTTP协议的网站应用非常便捷。而HTTP协议是一种单向的通信协议&#xff0c;只能接收客户端的请求&#xff0c;然后响应请求&#xff0c;不能主动向客户端推送信息。因此&#xff0c;一些实时性要求比较高的应用&#xff0c;如实时聊天、…

WPF 实现火炬效果

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 01—效果预览02—代码如下一、FireControl.cs 代码如下using System; using System.Collections.Generic; using System.Linq; using System.Tex…

08 comet反向ajax

一&#xff1a;HTTP协议与技久链接分块传输---->反向ajax 反向ajax又叫comet, server push,服务器推技术. 应用范围: 网页聊天服务器,, 新浪微博在线聊天,google mail 网页聊天,都有用到. 原理: 一般而言, HTTP协议的特点, 连接<->断开. 具体什么时间断开? 服务器响应…

男朋友出的性格测试题

1 一家人出去玩了三天&#xff0c;把猫忘在家里了&#xff01;2 嗷呜3 竟然毫无违和感4 叫你一声造句鬼才不过分吧5 秋天原来是这样来的嘛~6 当代嗑cp网友现状5 现在的年轻人都哪里学来的这么多招数内容自沙雕男友的日常你点的每个赞&#xff0c;我都认真当成了喜欢

linux连接建立的时间,用timedatectl在Linux中检查当前时区及更改时区(创建符号链接来更改时区)...

本文介绍如何在Linux操作系统中设置或更改时区的方法&#xff0c;可以使用timedatectl&#xff0c;包括通过创建符号链接来更改时区。前言时区是具有相同标准时间的地理区域&#xff0c;通常&#xff0c;时区是在操作系统的安装过程中设置的&#xff0c;但以后可以轻松更改。对…

mapbox 导航_狂甩不掉,骑行最稳手机支架!一体式安装太方便,秒变单车导航仪...

发对于骑行爱好者而言&#xff0c;对手机支架的稳固性有很高的要求&#xff0c;同时支架体积不能太大&#xff0c;对手机本身也要有一定的保护性&#xff0c;手机安放好&#xff0c;骑行才能更自在&#xff01;一个舒适的手机支架&#xff0c;对于业务繁忙或者像小渣一样的路痴…

Docker小白到实战之Docker网络简单了解一下

前言现在对于Docker容器的隔离性都有所了解了&#xff0c;但对容器IP地址的分配、容器间的访问等还是有点小疑问&#xff0c;如果容器的IP由于新启动导致变动&#xff0c;那又怎么才能保证原有业务不会被影响&#xff0c;这就和网络有挂钩了&#xff0c;接下来就大概说说。正文…

^_^家园游记^_^

j 你梦想中的家是怎么家的呢&#xff1f; 是鲁宾逊漂流记中那样&#xff1a;一个荒岛&#xff0c;一片青山绿水的悠闲自在&#xff1f; 还是让人流连忘返的色彩斑斓&#xff0c;鳞次栉比&#xff0c;浓浓的欧式典雅&#xff1f; 或是奔放自由的乡村田园&#xff0c;精…

sigar如何获取linux的buffer内存,Linux 下使用Sigar 获取内存信息

上一篇文章介绍了linux下的sigar 库,并使用sigar 库来获取cpu 使用率,本文在这里介绍一下如何使用sigar 库获取内存信息.和cpu 一样,sigar中有和内存相关的结构体sigar_mem_t,我们来看一下结构体原型:typedef struct {sigar_uint64_tram,total,used,free,actual_used,actual_fr…

如何将手机投屏到电脑_手机如何投屏到电脑上?详细教程看这里,手机投屏

手机再大的屏幕&#xff0c;也没有手机投屏到电脑、电视的体验爽。那么哪款投屏软件好用&#xff1f;又如何使用呢&#xff1f;下面小编给大家介绍下金舟苹果手机投屏软件&#xff0c;一起来看看如何将手机投屏到电脑上&#xff0c;详细步骤如下。第一步、首先&#xff0c;在电…

inputstream是否一定要close_汽车加装行李架后,总被交警拦下,类似改装,是否一定要备案...

其实改装不是儿戏&#xff0c;有些部位是一定不能触碰的&#xff0c;汽车“轻改”后担心上路被交警处罚&#xff0c;哪些是不能触碰的“红杠杠”&#xff0c;汽车加装行李架后&#xff0c;总被交警拦下&#xff0c;类似改装&#xff0c;是否一定需要备案&#xff0c;是我们今天…

不好意思,爱因斯坦这次,又对了!

▲ 点击查看在科学界中&#xff0c;有一个非常著名的概念&#xff0c;叫做后设认知。官方解释是&#xff1a;人们是如何对自己的思维模式进行反思。打个简单的比方&#xff1a;你学习或者自己孩子学习的时候&#xff0c;会不会经常出现一道数学题反复做错的情况&#xff0c;明明…

开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式

原文:【原创】开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式开源Math.NET基础数学类库使用系列文章总目录&#xff1a; 1.开源.NET基础数学计算组件Math.NET(一)综合介绍 2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算 3.开源.NET基础数学计算组件Ma…

元胞自动机模型_【ABM仿真模拟】第三章 元胞自动机 B

是新朋友吗&#xff1f;记得先点蓝字关注我哦&#xff5e;第三章 元胞自动机 B2020/01/233.3投票模型(Voting) 课程导读无论是国内国外&#xff0c;投票结果的预测都异常受到关注。在众多唐斯模型、中间选民模型 、以及Sznajd模型中&#xff0c;投票模型作为典型的元胞自动机&a…

喜报!985大学首次登上Nature封面,这所学校可太不容易了!

全世界只有3.14 % 的人关注了爆炸吧知识建校64年来&#xff0c;第一次登上期刊封面又一所985院校出息了&#xff01;伦敦时间6月4号&#xff0c;《Nature》刊发了电子科技大学邓旭教授团队的最新研究成果&#xff0c;并被选为当期封面。《设计坚固的超疏水表面》《Nature》作为…

getbean方法找不到bean_iphone手机静音找不到怎么办 iphone静音找不到解决方法【图文】...

一个网友给小编留言&#xff0c;询问&#xff1a;“我的iphone调静音了现在找不到&#xff0c;有什么工具能找到”这一个问题&#xff0c;因此&#xff0c;在今天的iPhone使用教程&#xff0c;小编就给大家讲解一下具体的解决方法&#xff0c;那么&#xff0c;iphone手机静音找…