APP下载

.NET 5强化多项网络功能,并开始提供HTTP/3实验性支援

消息来源:baojiabao.com 作者: 发布时间:2026-05-24

报价宝综合消息.NET 5强化多项网络功能,并开始提供HTTP/3实验性支援

.NET 5在去年的时候正式发布,而直到现在微软才详细地揭露,他们对.NET 5网络堆叠所做的功能强化,获得改善的网络功能范畴,包括HTTP、Sockets、网络相关安全性以及部分网络原语。

在.NET 5中,HTTP开始拥有更好的错误处理能力,微软提到,他们对HTTP领域进行了多项改进和修复,像是其中一个常被要求的功能,是在使用HttpClient的时候,希望能从取消的情况中区分逾时。

微软所做的改进包括让开发者可以使用自定义CancellationToken,来区分逾时和取消,为了向后相容,客户端仍会丢出TaskCanceledException讯息,但是内部的异常情况则是TimeoutException。另一个改进是在HttpRequestException中加入HTTP状态代码(HttpStatusCode),新的状态代码属性可为空值,并在EnsureSuccessStatusCode被呼叫的时候进行设定,可以用在异常过滤器中。

.NET 5的特色之一,便是提供一致的开发体验,而这个想法也在网络相关的实作中贯彻,过去.NET Core中的HTTP堆叠,相依于平台的处理程式(Handlers),像是WinHttpHandler以Windows的WinHTTP为基础,而适用于Linux和Mac的CurlHandler,则是以libcurl为基础,微软提到,由于这两个函式库的差异,因此不可能对每个平台维持一致性。

所以微软开始在.NET Core 2.1中,加入了一个称为SocketsHttpHandler的HTTP实作,并且花费大量心力强化其功能与可靠性,并且从System.Net.Http.dll中,完全删除相依于特定平台的处理程式。在.NET 5中,微软持续强化这样的想法,拿掉让开发者自由切换回旧方法的选项,不过开发者仍然可以透过下载独立的NuGet套件,继续使用WinHttpHandler。

微软提到,因为HttpClient是高阶API,使用起来很方便,但是相对的,也就缺少一些灵活性。考量进阶情境可能需要更灵活地使用方式,微软在.NET 5中,对SocketsHttpHandler加入了两个扩充功能点ConnectCallback和PlaintextStreamFilter,以强化其灵活性。

ConnectCallback让开发者可以创建自定义连接,当每次开启新的TCP连接时,都会呼叫ConnectCallback函式,该回呼函式能够被用来创建程序内传输、控制DNS解析,甚至是控制通用或是特定平台的底层Socket选项。而另一个回呼函式PlaintextStreamFilter,则让开发者可以在新开启的连线上,插入自定义层,应用程序在完全建立连接之后,但在发送任何HTTP之前,会先触发此回呼函式,开发者可以将其用于监听安全连线中,发送的明文资料等应用。

由于HTTP/3和其底层传输层QUIC,还在最后标准化阶段,.NET 5使用开源QUIC协定跨平台实作MsQuic,加入了对HTTP/3的实验性支援,官方仍不建议将其用在正式产品中。QUIC是一种基于UDP的传输标准,比建立在TCP之上的连接,拥有更快的交握速度,还对单一连接中的多请求,提供更稳定的多路复用能力,也能对行动客户端,在多重网络环境中,提供更平顺的切换体验。

而.NET 5也弥补了.NET Core在遥测方面的弱点,过去要监控.NET Core应用程序并不方便,用户只会收到冗长且不一致的日志讯息,而且监听这些讯息,还可能会对效能产生影响。.NET 5以EventSource为基础,设计并且实作了一系列新的遥测事件和计数器,仅占用少量CPU资源,就可让用户良好地监控.NET 5应用程序。

.NET的安全层,仰赖底层操作系统的功能,在以Linux为基础的系统,微软使用OpenSSL来支援TLS 1.3,而在Windows 10,TLS 1.3仅在1903版本后才可用,而且仅提供用作测试目的,因此过去的.NET Core版本,在Windows中并无法使用TLS 1.3,不过这个情况从Windows预览版20170之后情况改变,TLS 1.3预设启用,开发者可以透过新的Schannel API使用TLS 1.3。

2021-01-13 11:49:00

相关文章