当托管在Azure应用程序服务中时,如何控制添加到ASP.NET核心Web应用程序中的HTTP响应标头?

时间:2019-03-25 15:19:55

标签: c# azure http asp.net-core azure-web-sites

我们编写了一个ASP.NET core 2.2 Web应用程序,该应用程序基本上公开了一些Web api控制器,并且我们使用ResponseCachingMiddleware来在中间件管道中实现服务器端响应缓存。

我们遵循this Microsoft guide,我们决定添加HTTP响应标头Vary,以便来自应用程序的每个响应都包含以下标头:Vary: Accept-Encoding, Accept-Charset

需要这样做(如上面链接的指南所述),以便响应高速缓存接受客户端请求标头,以便在且仅当它们与客户端请求兼容时才使用高速缓存的响应。

与邮递员进行测试我注意到,在Azure中部署应用程序时(我们使用标准的Azure App Service进行此操作),我不希望使用Vary响应标头:似乎Azure本身会添加值{{ 1}},以便将Vary标头的值设置为Accept-Encoding(这是我们的应用程序设置的值和Azure会自动添加的值的组合)。

那是我有几个问题:

  • 天蓝色主机是否真的增加了额外的值Accept-Encoding, Accept-Charset,Accept-Encoding
  • 是否可以自定义Azure主机添加的HTTP标头(如果有)?
  • Accept-EncodingAccept-Encoding, Accept-Charset,Accept-Encoding标头的有效值吗?即使我们将值重复两次也能按预期工作吗?

1 个答案:

答案 0 :(得分:2)

在Azure App Service(Windows上)上托管ASP .NET Core仍使用IIS,概述为here。因此,您应该可以通过将web.config添加到项目中来控制标头。

以下是示例,以及文档中的link

<configuration>  
  <system.web>
    <httpRuntime enableVersionHeader="false" /> <!-- Removes ASP.NET version header. Not needed for Ghost running in iisnode -->
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering removeServerHeader="true" /> <!-- Removes Server header in IIS10 or later and also in Azure Web Apps -->
    </security>
    <httpProtocol>
      <customHeaders>
        <clear /> <!-- Gets rid of the other unwanted headers -->
        <add name="X-Frame-Options" value="SAMEORIGIN" />
      </customHeaders>
      <redirectHeaders>
        <clear />
      </redirectHeaders>
    </httpProtocol>