从Azure中的Web Api中删除缓存HTTP响应标头

时间:2014-02-20 11:21:17

标签: iis azure http-headers

我正尝试在标准模式下在Azure网站上托管的Web Api 2项目的响应中删除不需要的Cache-Control,Pragma和Expires HTTP标头。

我在 Global.asax Application_PreSendRequestHeaders 中尝试了以下内容:

var headers = ((HttpApplication)sender).Context.Response.Headers;
headers.Remove("Cache-Control");
headers.Remove("Pragma");
headers.Remove("Expires");

这在Visual Studio中进行调试时有效。但是在Azure上,只有GET请求才会删除标头,而不会删除HEAD或POST请求。

感谢任何建议!

1 个答案:

答案 0 :(得分:1)

Azure网站支持请求过滤模块,因此您可以在web.config中执行此操作:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <remove name="Cache-Control" />
      <remove name="Pragma" />
      <remove name="Expires" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

免责声明:我不打算删除这些标头,这是HTTP协议的重要组成部分。

删除缓存标题对客户说“完全取决于您决定如何缓存此响应”,这可能会导致生产中出现奇怪且难以重现的错误。如果要禁用缓存,则应将这些标头设置为明确禁用缓存的值:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Cache-Control" value="no-cache" />
      <add name="Pragma" value="no-cache" />
      <add name="Expires" value="-1" />
    </customHeaders>
  </httpProtocol>
</system.webServer>