HttpClient EventSource 事件中的 URI 查询和片段编辑

在 .NET 9 中,HttpClientSocketsHttpHandlerEventSource 名称:System.Net.Http)发出的 EventSource 事件的默认行为已修改,以清除 URI 的查询和片段部分。 此更改通过防止记录查询字符串中包含的潜在敏感信息,同时将修订的性能成本保持在最低水平,从而增强隐私。 如有必要,可以重写此行为。

引入的版本

.NET 9 预览版 7

旧行为

以前,由 HttpClientSocketsHttpHandler 包含的查询字符串信息发出的事件,这可能会无意中公开敏感信息。

新行为

随着 dotnet/runtime#104741的变化,默认情况下,查询和片段部分会在 HttpClientSocketsHttpHandler 事件中被 * 字符替换。 此更改会影响特定事件和参数,例如 RequestStart 中的 pathAndQueryRedirect中的 redirectUri

中断性变更的类型

此更改为行为更改

更改原因

此更改的主要原因是通过降低无意中记录敏感信息的风险来增强隐私。 查询字符串通常包含敏感数据,并默认从日志中对其进行修订有助于保护此信息。 为了保持实现简单高效,片段部分也被删除了。

如果在使用 HttpClientSocketsHttpHandler 事件时需要查询字符串信息,并且确信这样做是安全的,可以通过以下三种方式之一设置 AppContext 开关来全局启用查询字符串日志记录:

  • 在项目文件中。

    <ItemGroup>
      <RuntimeHostConfigurationOption Include="System.Net.Http.DisableUriRedaction" Value="true" />
    </ItemGroup>
    
  • 在 runtimeconfig.json 文件中。

    {
        "runtimeOptions": {
            "configProperties": {
                "System.Net.Http.DisableUriRedaction": true
            }
        }
    }
    
  • 通过环境变量。

    DOTNET_SYSTEM_NET_HTTP_DISABLEURIREDACTION 设置为 true 或 1。

否则,无需执行任何操作,默认行为将有助于增强应用程序的隐私方面。

注意

此开关还会禁用默认 IHttpClientFactory 日志中的查询字符串修订。 有关详细信息,请参阅 IHttpClientFactory 日志中的 URI 查询修订。

受影响的 API