在ASP.Net和IIS中删除不必要的HTTP响应头
2011-08-17 23:48
260 查看
观察Web服务器的HTTP响应头
为了看到从服务器和浏览器之间通信的HTTP头,你需要在浏览器安装一些插件.比如说Fiddler就是一个微软发布的免费的用于记录HTTP日志的软件。而这些HTTP日志会包含HTTP头,在这篇文章中我会假设读者已经熟悉了这个软件,假如你并不熟悉这个软件的话,我推荐阅读Troubleshooting Website Problems by Examining the HTTP Traffic,这篇文章里详细讲述了如何安装&使用Fiddler.使用Fiddler,找一个使用IIS和Asp.net的Web服务器,比如微软asp.net官方网站,通常在默认情况下,HTTP响应头会包含3个Web服务器的自身识别头.
服务器-指定是何种服务器以及服务器版本,比如:
Server:Microsoft-IIS/6/0
Server:Microsoft-IIS/7.0
X-Powered-By,用于表示这个站点是“Powered by asp.net”
X-Powered-By:ASP.NET
X-AspNet-Version,用于指定当前的Asp.net版本,注意就算你使用Asp.net 3.5但在X-AspNet-Version可能会报告使用的是2.0:
X-AspNet-Version:2.0.50727
X-AspNet-Version:1.1.4322
X-AspNetMvc,指定当前版本的Asp.net MVC(如果使用Asp.net MVC的话):
X-AspNetMvc-Version:1.0
这些服务器自身识别信息在大多数情况下并不会被浏览器使用,因此可以被安全的移除,这篇文章的余下部分将会讲述如何移除这些HTTP头
移除X-AspNet-Version HTTP头
X-AspNet-Version HTTP头会告诉全世界我们服务器当前使用的Asp.net版本,去除这个HTTP头简直是小菜一碟,只需要在Web.Config的<system.web>节点下添加如下内容:<httpRuntime enableVersionHeader="false" />
是不是非常轻松愉快?
移除X-AspNetMvc-Version HTTP头
X-AspNetMvc-Version HTTP头会自动被Asp.net MVC框架加入进去,如果你没有使用Asp.net MVC,这个HTTP头不会存在.移除这个HTTP头的方式是在Global.asax的Application_Start事件中将
MvcHandler类的DisableMvcResponseHeader属性设置为True
[code]// C#MvcHandler.DisableMvcResponseHeader = true;' VBMvcHandler.DisableMvcResponseHeader = True
移除X-Powered-By HTTP头
X-Powered-ByHTTP头并不只是在Asp.net中存在,其他服务端语言,比如PHP,也会包含这个HTTP头,当Asp.net被安装时,这个头会作为一个定制的
HTTP头插入IIS中,因此,我们需要将这个HTTP头从IIS的配置中删除,如果你的网站是在共享的环境下并且没有使用IIS7并使用管道模式,你不
得不为此联系你的空间提供商来帮你移除。(如果你的网站是在IIS7环境下,那你可以通过HTTP Module的形式通过编程来移除)
在IIS6中移除X-Powered-By HTTP头:
启动IIS Manager
展开Website目录
在Website上点击右键并在弹出的菜单中选择属性
选择HTTP Header标签,所有IIS响应中包含的自定义的HTTP头都会在这里显示,只需要选择响应的HTTP头并点击删除就可以删除响应的HTTP头,如图:
而在IIS7中移除X-Powered-By HTTP头的方法是:
启动IIS Manager
展开Website目录
选择你需要修改的站点并双击HTTP响应头部分
所有的自定义HTTP头全在这里了,删除相应的头仅需要点击右边的”Remove”链接:
移除Server HTTP头
这个HTTP头会自动附加在当前的IIS相应中,删除这个HTTP头可以使用微软免费的UrlScan工具.如果你使用的是IIS7 整合管道模式,你也可以使用HTTP Module来使用编程的方式来去除它。Stefan Grobner's的博客中IIS 7 - How To Send A Custom "Server" HTTP Header这篇文章详细讲述了如何修改Server HTTP标头.简单的说,你需要创建一个HTTP Module并为
PreSendRequestHeaders事件创建事件处理程序,在这个事件处理程序中的代码会类似:
HttpContext.Current.Response.Headers.Remove("Server");
Howard von Rooijen的文章更深层次的论述了如何在IIS7和整合管道模式中移除Server Http头,更多细节,请查看:Cloaking your ASP.NET MVC Web Application on IIS 7
小结
移除服务器自身识别响应头会有如下好处:这降低了服务器和浏览器之间所需传输的数据量
使黑客攻击服务器变得更加困难,从而使服务器更加强壮
如上的几个HTTP头并没有带来直接的好处,反而小幅加重了宽带的负担,所幸的是我们可以通过配置的方式进行移除
相关文章推荐
- 在ASP.Net和IIS中删除不必要的HTTP响应头
- 【译】在ASP.Net和IIS中删除不必要的HTTP响应头
- 在ASP.Net和IIS中删除不必要的HTTP响应头
- Removing Unnecessary HTTP Headers in IIS and ASP.NET 在ASP.Net和IIS中删除不必要的HTTP响应头
- 【译】在ASP.Net和IIS中删除不必要的HTTP响应头
- 在ASP.Net和IIS中删除不必要的HTTP响应头[转]
- 在ASP.Net和IIS中删除不必要的HTTP响应头
- 【引用】在ASP.Net和IIS中删除不必要的HTTP响应头
- 【译】在ASP.Net和IIS中删除不必要的HTTP响应头
- 在ASP.Net和IIS中删除不必要的HTTP响应头
- 引用:CareySon--【译】在ASP.Net和IIS中删除不必要的HTTP响应头
- 在ASP.Net和IIS中删除不必要的HTTP响应头
- (翻译) 怎样移除IIS 响应中的 Server, X-AspNet-Version, X-AspNetMvc-Version 和 X-Powered-By
- ASP.NET(IIS)出现"没有为请求类型"GET"找到 HTTP 处理程序"
- 截获asp.net上传文件过大IIS报错的Httpmodule代码 --方便以后使用
- 批量删除记录时如何实现全选方法总结 (转)http://www.cnblogs.com/chenou/articles/1349646.html[Asp.net Ajax 控件]
- iis发布asp.net解析 全过程配置http://hi.baidu.com/xuexiang516168/blog/item/afb62317815fdb12962b433c.html
- ASP.NET Internals – IIS and the Process Model(http://dotnetslackers.com/articles/iis/ASPNETInternalsIISAndTheProcessModel.aspx)
- http响应Last-Modified和ETag以及asp.net web api实现(转载)
- asp.net web api的自托管模式HttpSelfHostServer可以以控制台程序或windows服务程序为宿主,不单单依赖于IIS web服务器