用于网络的运行时配置选项
HTTP/2 协议
配置是否启用对 HTTP/2 协议的支持。
已在 .NET Core 3.0 中引入。
仅限 .NET Core 3.0:如果省略此设置,则会禁用对 HTTP/2 协议的支持。 它等效于将值设置为
false
。.NET Core 3.1 和 .NET 5 +:如果省略此设置,则会启用对 HTTP/2 协议的支持。 它等效于将值设置为
true
。
设置名 | 值 | |
---|---|---|
runtimeconfig.json | System.Net.Http.SocketsHttpHandler.Http2Support |
false - 禁用true - 启用 |
环境变量 | DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2SUPPORT |
0 - 禁用1 - 启用 |
HttpClient 中的 SPN 创建(.NET 6 及更高版本)
- 当
Host
标头缺失并且目标未在默认端口上运行时,会影响用于 Kerberos 和 NTLM 身份验证的服务主体名称 (SPN) 的生成。 - .NET Core 2.x 和 3.x 不在 SPN 中包括端口。
- .NET Core 5.x 在 SPN 中包括端口
- .NET 6 及更高版本不包括端口,但行为是可配置的。
设置名 | 值 | |
---|---|---|
runtimeconfig.json | System.Net.Http.UsePortInSpn |
true - SPN 中包括端口号,例如 HTTP/host:port false - SPN 中不包括端口,例如 HTTP/host |
环境变量 | DOTNET_SYSTEM_NET_HTTP_USEPORTINSPN |
1 - SPN 中包括端口号,例如 HTTP/host:port 0 - SPN 中不包括端口,例如 HTTP/host |
UseSocketsHttpHandler(仅限.NET Core 2.1-3.1)
配置 System.Net.Http.HttpClientHandler 是使用 System.Net.Http.SocketsHttpHandler 还是使用旧的 HTTP 协议堆栈(在 Windows 上为 WinHttpHandler,在 Linux 上为基于 libcurl 实现的内部类
CurlHandler
。)注意
可使用高级别网络 API,而不是直接实例化 HttpClientHandler 类。 此设置还会影响高级别网络 API 使用的 HTTP 协议堆栈类型,包括 HttpClient 和 HttpClientFactory。
如果省略此设置,HttpClientHandler 将使用 SocketsHttpHandler。 它等效于将值设置为
true
。
设置名 | 值 | |
---|---|---|
runtimeconfig.json | System.Net.Http.UseSocketsHttpHandler |
true - 允许使用 SocketsHttpHandlerfalse - 允许使用 Windows 上的 WinHttpHandler 或 Linux 上的 libcurl |
环境变量 | DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER |
1 - 允许使用 SocketsHttpHandler0 - 允许使用 Windows 上的 WinHttpHandler 或 Linux 上的 libcurl |
注意
从 .NET 5 开始,System.Net.Http.UseSocketsHttpHandler
设置不再可用。
Latin1 标头(仅限 .NET Core 3.1)
此开关允许放宽 HTTP 标头验证,从而使 SocketsHttpHandler 可以在标头中发送 ISO-8859-1 (Latin-1) 编码的字符。
如果省略此设置,则尝试发送非 ASCII 字符将导致 HttpRequestException。 它等效于将值设置为
false
。
设置名 | 值 | |
---|---|---|
runtimeconfig.json | System.Net.Http.SocketsHttpHandler.AllowLatin1Headers |
false - 禁用true - 启用 |
环境变量 | DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_ALLOWLATIN1HEADERS |
0 - 禁用1 - 启用 |
注意
此选项仅在 3.1.9 版本之后 NET Core 3.1 中提供,先前版本或更高版本中则不提供。 在 .NET 5 中,我们建议使用 RequestHeaderEncodingSelector。