Den*_*s D 7 c# asp.net iis ssl
所以,我已经看到了其他答案和其他网站中使用的这个解决方案(http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx),但我不明白HSTS标头是如何添加的.我认为它与此有很多关系:
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
Run Code Online (Sandbox Code Playgroud)
有人可以解释"RESPONSE_Strict_Transport_Security"的来源吗?
完整代码:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{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" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我想我找到了。来自“URL重写模块2.0配置参考”:
如果服务器变量以“RESPONSE_”开头,则它存储 HTTP 响应标头的内容,其名称通过使用以下命名约定确定:
- 名称中的所有下划线(“_”)符号都会转换为短划线符号(“-”)。
- “RESPONSE_”前缀已删除
然后在文档中:
URL 重写模块 2.0 中的出站重写规则可用于设置新的或修改现有的响应 HTTP 标头。通过使用与服务器变量相同的语法以及使用从重写规则访问响应标头中所述的命名约定,可以在出站规则内访问响应 HTTP 标头。...重写规则的模式将应用于指定响应标头的内容,如果规则的模式和可选条件成功评估,则该响应标头的值将被重写。
所以该示例中的代码表达的是:“如果Strict-Transport-Security
响应头有任何值 ( .*
),包括未定义的,则将值重写为max-age=31536000
(如果满足条件)。
我无法向您指出这方面的确切来源,但我可以通过实验告诉您“RESPONSE_Strict_Transport_Security”将“Strict-Transport-Security”标头添加到响应中,其方式与“RESPONSE_Expect_Staple”添加“Expect-订书钉”标题。
以下两个链接暗示我们可以预期上述行为,但我从未找到有关其具体工作原理的文档。
https://learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/modifying-http-response-headers
归档时间: |
|
查看次数: |
829 次 |
最近记录: |