【问题标题】:Remove cache HTTP response headers from Web Api in Azure从 Azure 中的 Web Api 中删除缓存 HTTP 响应标头
【发布时间】:2014-03-21 07:15:45
【问题描述】:

我正在尝试在标准模式下托管在 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 请求。

感谢任何建议!

【问题讨论】:

标签: iis azure http-headers


【解决方案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>

【讨论】:

  • 谢谢,我刚试过。不幸的是,这种技术似乎没有删除这些标头(适用于 Azure 和本地开发服务器)。原则是可靠的,因为我已经以这种方式删除了 X-Powered-By 标头。我想知道这些标题是怎么回事?!
  • 正如我所说,这些是重要的标题。为什么要删除它们而不是将它们设置为特定值?
  • 此 API 的唯一使用者是没有缓存概念的专有硬件设备。所以标题是多余的。
  • 考虑到 pragma: no-cache 不应该是响应标头,Microsoft 停止在 2005 中推荐使用它,我真的不认为它是必要的。并且 Expires: -1 是一个无效的标头,它复制了 Cache-Control 所做的事情,它也可以被安全地删除。我相信。
猜你喜欢
  • 1970-01-01
  • 2020-06-18
  • 2018-03-10
  • 2018-07-07
  • 2013-12-09
  • 2018-06-22
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多