删除IIS 7+上的“Date”http响应标头

时间:2013-01-23 09:38:03

标签: iis http-headers asp.net-web-api

我正在开发一个ASP.NET Web API应用程序,它使用自定义日期时间http标头响应客户端。虽然我已经阅读了几篇描述如何从ASP.NET / IIS中删除响应头的文章,但这个文章似乎总是很有弹性,我无法摆脱它。它似乎被放置在程序员/管理员控制之外的某个响应管道中,最后。

我知道在响应中不包含“Date”标头可能是一种不好的做法,但正如我所提到的,自定义日期时间标题(以刻度而不是字符串表示形式)使默认值为冗余;此外,这是一个私有API,所以我确切地知道谁和如何使用它。

是否可以以任何方式在IIS(v7 +)中为特定站点(或直接从Web API应用程序)删除此标头?

修改
我试过(没有成功)以下技术:

  • 创建自定义处理程序以从Web API项目中删除标题
  • 注册自定义IHttpModule
  • 明确删除<httpProtocol><customHeaders>部分
  • 中的web.config中的标头
  • 在IIS管理器中删除HTTP响应标头
  • protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
  • Global.asax.cs方法中的标头删除代码

2 个答案:

答案 0 :(得分:4)

根据HTTP Spec日期标题是强制性的,但我不认为适用于您的情况的条件除外:

Origin servers MUST include a Date header field in all responses, except in these cases:

  1. If the response status code is 100 (Continue) or 101 (Switching
     Protocols), the response MAY include a Date header field, at
     the server's option.
  2. If the response status code conveys a server error, e.g. 500
     (Internal Server Error) or 503 (Service Unavailable), and it is
     inconvenient or impossible to generate a valid Date.
  3. If the server does not have a clock that can provide a
     reasonable approximation of the current time, its responses
     MUST NOT include a Date header field. In this case, the rules
     in section 14.18.1 MUST be followed.

答案 1 :(得分:0)

这在实际的WebApi / Mvc管道中是不可能的,因此诸如动作过滤器和委托处理程序之类的选项已经完成。

相反,您可能需要实现自定义IHttpModule并在IIS中注册它。您应阅读并遵循一篇文章here。这种方法非常简单,易于适应。

只需将该示例中的set替换为:

HttpContext.Current.Response.Headers.Remove("Date");