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

Iis 从Azure中的Web Api中删除缓存HTTP响应头,iis,azure,http-headers,Iis,Azure,Http Headers,我正在尝试从Azure网站上以标准模式托管的Web Api 2项目中删除响应中不需要的缓存控制、Pragma和Expires HTTP头 我已在Global.asax应用程序中尝试了以下操作\u PreSendRequestHeaders: var headers = ((HttpApplication)sender).Context.Response.Headers; headers.Remove("Cache-Control"); headers.Remove("Pragma"); head

我正在尝试从Azure网站上以标准模式托管的Web Api 2项目中删除响应中不需要的缓存控制、Pragma和Expires HTTP头

我已在Global.asax应用程序中尝试了以下操作\u PreSendRequestHeaders

var headers = ((HttpApplication)sender).Context.Response.Headers;
headers.Remove("Cache-Control");
headers.Remove("Pragma");
headers.Remove("Expires");
在VisualStudio中进行调试时,此选项有效。但在Azure上,仅删除GET请求的头,而不删除HEAD或POST请求


谢谢你的建议

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>


谢谢,我刚试过。不幸的是,这些头似乎并没有被这种技术删除(同时适用于Azure和本地开发服务器)。原则是坚实的,因为我已经删除了X-Powered-By头这种方式。我想知道这些头是怎么回事?!正如我所说,这些都是重要的标题。为什么要删除它们而不是将它们设置为特定值?此API的唯一使用者是一个没有缓存概念的专有硬件设备。因此,页眉是多余的。考虑到PrimaMa:没有缓存不应该是一个响应头,微软停止推荐它的使用,我真的不认为它是必要的。和Expires:-1是一个无效的标头,它重复了缓存控件的功能,也可以安全地删除它。我相信。我认为你的思路是对的,但对于另一个问题,你可能不得不使用
Application\u BeginRequest
而不是
Application\u presandrequestheaders
。它还重新强制许多标题不能通过@Mark Rendlepossible duplicate of所建议的
进行修改