.NET 添加 header 以响应 index.html 请求?
.NET Add header to response on index.html request?
我有一个名为 Mensajes.Cliente
的 WebAPI 项目,其中包含一个 Angular 应用程序:
出于安全原因,我需要在每个服务器响应中添加 2 headers。解决了将以下内容添加到 Global.asax:
protected void Application_BeginRequest()
{
Response.AddHeader("X-Frame-Options", "DENY");
Response.AddHeader("X-XSS-Protection", "1");
}
当我调用任何控制器方法时,响应确实包含两个 header,因此可以正常工作。
但是当我尝试将 index.html 设置为 foo.com/Mensajes.Cliente
或 foo.com/Mensajes.Cliente/index.html
时,没有设置 header(它发生在所有静态内容为 .js 或.css 个文件)。
如何将这些 header 添加到 每个 服务器请求的响应中?
这些 header 必须在 web.config 或 Global.asax 配置中设置,还是在服务器配置中设置?
- 为站点的所有内容设置 header 的最简单方法是在
web.config
中。 system.webServer
中 httpProtocol
下的 customHeaders
部分将确保此 header 包含在所有文件和响应中。
示例:
<system.webServer>
<!--.......-->
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
<add name="X-XSS-Protection" value="1" />
</customHeaders>
</httpProtocol>
<!--.......-->
</system.webServer>
- 另一种选择是创建自定义
HttpModule
。这样您就可以更好地控制需要附加 headers 的文件和内容。
示例:
public class CustomOrgHeaderModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
public void Dispose() { }
void OnPreSendRequestHeaders(object sender, EventArgs e)
{
//To add header only for Html files
//You can add any condition as you need
if (HttpContext.Current.Request.Url.ToString().Contains(".html"))//css, js as you need
{
HttpContext.Current.Response.Headers.Add("X-Frame-Options", "DENY");
HttpContext.Current.Response.Headers.Add("X-XSS-Protection", "1");
}
}
}
并在web.config
-
中注册CustomOrgHeaderModule
<system.webServer>
<!--.......-->
<modules>
<add name="CustomHeaderModule" type="SOFTEST.NET.API.Modules.CustomOrgHeaderModule" /><!--.SOFTEST.NET.API.Modules.CustomOrgHeaderModule is then FullNmae of the class MEANS Namesapce.CassName -->
</modules>
<!--.......-->
</system.webServer>
并且您不再需要在 Global.asax
中设置 Response.AddHeader
。
我有一个名为 Mensajes.Cliente
的 WebAPI 项目,其中包含一个 Angular 应用程序:
出于安全原因,我需要在每个服务器响应中添加 2 headers。解决了将以下内容添加到 Global.asax:
protected void Application_BeginRequest()
{
Response.AddHeader("X-Frame-Options", "DENY");
Response.AddHeader("X-XSS-Protection", "1");
}
当我调用任何控制器方法时,响应确实包含两个 header,因此可以正常工作。
但是当我尝试将 index.html 设置为 foo.com/Mensajes.Cliente
或 foo.com/Mensajes.Cliente/index.html
时,没有设置 header(它发生在所有静态内容为 .js 或.css 个文件)。
如何将这些 header 添加到 每个 服务器请求的响应中?
这些 header 必须在 web.config 或 Global.asax 配置中设置,还是在服务器配置中设置?
- 为站点的所有内容设置 header 的最简单方法是在
web.config
中。system.webServer
中httpProtocol
下的customHeaders
部分将确保此 header 包含在所有文件和响应中。
示例:
<system.webServer>
<!--.......-->
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
<add name="X-XSS-Protection" value="1" />
</customHeaders>
</httpProtocol>
<!--.......-->
</system.webServer>
- 另一种选择是创建自定义
HttpModule
。这样您就可以更好地控制需要附加 headers 的文件和内容。
示例:
public class CustomOrgHeaderModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
public void Dispose() { }
void OnPreSendRequestHeaders(object sender, EventArgs e)
{
//To add header only for Html files
//You can add any condition as you need
if (HttpContext.Current.Request.Url.ToString().Contains(".html"))//css, js as you need
{
HttpContext.Current.Response.Headers.Add("X-Frame-Options", "DENY");
HttpContext.Current.Response.Headers.Add("X-XSS-Protection", "1");
}
}
}
并在web.config
-
CustomOrgHeaderModule
<system.webServer>
<!--.......-->
<modules>
<add name="CustomHeaderModule" type="SOFTEST.NET.API.Modules.CustomOrgHeaderModule" /><!--.SOFTEST.NET.API.Modules.CustomOrgHeaderModule is then FullNmae of the class MEANS Namesapce.CassName -->
</modules>
<!--.......-->
</system.webServer>
并且您不再需要在 Global.asax
中设置 Response.AddHeader
。