5

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

我知道在响应中不包含“日期”标头可能是一种不好的做法,但是正如我所提到的,自定义日期时间标头(以刻度而不是字符串表示形式)使默认标头变得多余;此外,这是一个私有 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
4

2 回答 2

6

根据 HTTP SpecDate 标头是强制性的,除了我认为不适用于您的情况的这些条件:

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.
于 2013-01-23T22:16:36.310 回答
0

这在实际的 WebApi/Mvc 管道中是不可能的,因此动作过滤器和委托处理程序等选项不可用。

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

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

HttpContext.Current.Response.Headers.Remove("Date");
于 2013-01-23T10:02:47.143 回答