在重定向到 web.config 中的 www 子域期间在域根目录上添加 HSTS http headers
Adding HSTS http headers on domain root during redirect to www subdomain in web.config
我有一个 asp.net 网络应用程序,它被 sub-domain "www" 上的搜索引擎编入索引。我真的不想改变这一点:对根域的请求都设置了永久重定向到 www 版本,这没问题。
我已经在网站上启用了 HSTS,但是由于重定向,我添加的 HSTS 出站 header 规则从未在对域根目录的第一个请求中命中。 (它适用于后续的 https 请求,因为没有重定向)。这是一个问题,因为我想提交网站进行 HSTS 预加载——这要求重定向包含 HSTS 响应 header...
我已经尝试将规则的 stopProcessing 属性设置为 false(希望设置 HSTS header 的出站规则即使在重定向时也会是 运行)但无济于事。
以下是我的配置文件的相关摘录:
<rewrite>
<rules>
<rule name="Canonical Host Name, HTTPS enabled" stopProcessing="false">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" negate="true" pattern="www.mysite.co.uk" />
<add input="{HTTP_HOST}" negate="true" pattern="^[a-z0-9]+\.cloudapp\.net$" />
<add input="{HTTP_HOST}" negate="true" pattern="localhost" />
</conditions>
<action type="Redirect" url="https://www.mysite.co.uk/{R:1}" redirectType="Permanent" />
</rule>
</rules>
<!-- hsts | http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx -->
<outboundRules rewriteBeforeCache="true">
<rule name="Add Strict-Transport-Security" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
<add input="{HTTP_HOST}" pattern="(mysite.co.uk|www.mysite.co.uk)" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
</rule>
</outboundRules>
</rewrite>
必须添加 header 如下:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
</customHeaders>
</httpProtocol>
</system.webServer>
即使在发送重定向时也会发送 header。
我删除了 outboundRules 部分。
来自 this answer 服务器故障,
An HSTS Host MUST NOT include the STS header field in HTTP responses conveyed over non-secure transport.
请确保正确配置服务器。
我有一个 asp.net 网络应用程序,它被 sub-domain "www" 上的搜索引擎编入索引。我真的不想改变这一点:对根域的请求都设置了永久重定向到 www 版本,这没问题。
我已经在网站上启用了 HSTS,但是由于重定向,我添加的 HSTS 出站 header 规则从未在对域根目录的第一个请求中命中。 (它适用于后续的 https 请求,因为没有重定向)。这是一个问题,因为我想提交网站进行 HSTS 预加载——这要求重定向包含 HSTS 响应 header...
我已经尝试将规则的 stopProcessing 属性设置为 false(希望设置 HSTS header 的出站规则即使在重定向时也会是 运行)但无济于事。
以下是我的配置文件的相关摘录:
<rewrite>
<rules>
<rule name="Canonical Host Name, HTTPS enabled" stopProcessing="false">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" negate="true" pattern="www.mysite.co.uk" />
<add input="{HTTP_HOST}" negate="true" pattern="^[a-z0-9]+\.cloudapp\.net$" />
<add input="{HTTP_HOST}" negate="true" pattern="localhost" />
</conditions>
<action type="Redirect" url="https://www.mysite.co.uk/{R:1}" redirectType="Permanent" />
</rule>
</rules>
<!-- hsts | http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx -->
<outboundRules rewriteBeforeCache="true">
<rule name="Add Strict-Transport-Security" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
<add input="{HTTP_HOST}" pattern="(mysite.co.uk|www.mysite.co.uk)" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
</rule>
</outboundRules>
</rewrite>
必须添加 header 如下:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
</customHeaders>
</httpProtocol>
</system.webServer>
即使在发送重定向时也会发送 header。 我删除了 outboundRules 部分。
来自 this answer 服务器故障,
An HSTS Host MUST NOT include the STS header field in HTTP responses conveyed over non-secure transport.
请确保正确配置服务器。