用于网络的运行时配置选项

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 - 启用

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性

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

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性

UseSocketsHttpHandler(仅限.NET Core 2.1-3.1)

设置名
runtimeconfig.json System.Net.Http.UseSocketsHttpHandler true - 允许使用 SocketsHttpHandler
false - 允许使用 Windows 上的 WinHttpHandler 或 Linux 上的 libcurl
环境变量 DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER 1 - 允许使用 SocketsHttpHandler
0 - 允许使用 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