URL 重写 HSTS
URL Rewrite for HSTS
我正在尝试在 web.config 文件的 部分编写 HSTS 重写规则
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^test\.test\.test$" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://test.test.test/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
</rule>
</outboundRules>
</rewrite>
我可以在 IIS 中看到这些重定向和重写规则,但不确定为什么在通过开发工具 F12 检查时 Strict-Transport-Security header 不存在,而且网站功能齐全
我知道还有另一种方法可以在 web.config 中添加自定义 headers,但是通过查看 SO 上的几篇帖子,它看起来不像是推荐的方法。
谁能告诉我我在这里做错了什么?
我认为您的“HTTP 到 HTTPS 重定向”规则不正确。请打开fail request tracing查看是否生效。因为 HTTPS 的值只有 On 或 Off,所以我测试模式时总是失败。更多服务器变量可以参考this.
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="Off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://test.test.test/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
</rule>
</outboundRules>
当我改变模式时,一切顺利。 Strict-Transport-Security header 可以在响应 header 中找到。
Microsoft 推荐的另外两种添加自定义 headers.One 的方法是在 HTTP 响应 Headers 模块中设置自定义 header。这种方式很快 simple.Refer 到 this。
另一个是自定义过滤器。下面是一些示例代码。
public class CustomFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//add in your custom headers
filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type");
filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Methods", "GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS");
base.OnActionExecuting(filterContext);
}
public void OnException(ExceptionContext filterContext)
{
//do some cool exception handling here
}
}
我正在尝试在 web.config 文件的
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^test\.test\.test$" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://test.test.test/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
</rule>
</outboundRules>
</rewrite>
我可以在 IIS 中看到这些重定向和重写规则,但不确定为什么在通过开发工具 F12 检查时 Strict-Transport-Security header 不存在,而且网站功能齐全
我知道还有另一种方法可以在 web.config 中添加自定义 headers,但是通过查看 SO 上的几篇帖子,它看起来不像是推荐的方法。
谁能告诉我我在这里做错了什么?
我认为您的“HTTP 到 HTTPS 重定向”规则不正确。请打开fail request tracing查看是否生效。因为 HTTPS 的值只有 On 或 Off,所以我测试模式时总是失败。更多服务器变量可以参考this.
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="Off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://test.test.test/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
</rule>
</outboundRules>
当我改变模式时,一切顺利。 Strict-Transport-Security header 可以在响应 header 中找到。
Microsoft 推荐的另外两种添加自定义 headers.One 的方法是在 HTTP 响应 Headers 模块中设置自定义 header。这种方式很快 simple.Refer 到 this。 另一个是自定义过滤器。下面是一些示例代码。
public class CustomFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//add in your custom headers
filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type");
filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Methods", "GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS");
base.OnActionExecuting(filterContext);
}
public void OnException(ExceptionContext filterContext)
{
//do some cool exception handling here
}
}