IIS 重定向到 HTTPS,不同的规则相同的结果
IIS redirection to HTTPS, different rules same result
在尝试将 http 流量重定向到 https 时,我发现了以下两个规则,它们似乎在做同样的事情,但是它们在两个地方有细微的差别。我应该更喜欢那个吗?有什么好处吗? (性能、极端情况等)
规则 1:
<rule name="HTTP to HTTPS Redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{SERVER_PORT_SECURE}" pattern="^0$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
规则 2:
<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>
区别在于输入和重定向 url,其中一个使用 {R:1},另一个使用 REQUEST_URI。
提前致谢
两条规则给出相同的结果。并且它们之间的性能没有显着差异。此外,IIS 默认在内核级别缓存此类规则。这意味着请求很可能会从 HTTP 内核模式驱动程序得到响应,而不会到达 Web 应用程序。因此,这些规则将以您无法衡量差异的速度发挥作用。
但是,如果您想进行不必要的优化(就像我有时做的那样:$),请检查以下规则。
<rule name="HTTP to HTTPS Redirect" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{SERVER_PORT_SECURE}" pattern="0" ignoreCase="false" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
以下是此规则的不必要预期改进;
- 通配符匹配比正则表达式便宜。
- 区分大小写a.k.a。二进制比较(
ignoreCase="false"
)更便宜。
- 寻找
0
寻找 {SERVER_PORT_SECURE}
比寻找 off
寻找 {HTTPS}
便宜。
在尝试将 http 流量重定向到 https 时,我发现了以下两个规则,它们似乎在做同样的事情,但是它们在两个地方有细微的差别。我应该更喜欢那个吗?有什么好处吗? (性能、极端情况等)
规则 1:
<rule name="HTTP to HTTPS Redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{SERVER_PORT_SECURE}" pattern="^0$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
规则 2:
<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>
区别在于输入和重定向 url,其中一个使用 {R:1},另一个使用 REQUEST_URI。
提前致谢
两条规则给出相同的结果。并且它们之间的性能没有显着差异。此外,IIS 默认在内核级别缓存此类规则。这意味着请求很可能会从 HTTP 内核模式驱动程序得到响应,而不会到达 Web 应用程序。因此,这些规则将以您无法衡量差异的速度发挥作用。
但是,如果您想进行不必要的优化(就像我有时做的那样:$),请检查以下规则。
<rule name="HTTP to HTTPS Redirect" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{SERVER_PORT_SECURE}" pattern="0" ignoreCase="false" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
以下是此规则的不必要预期改进;
- 通配符匹配比正则表达式便宜。
- 区分大小写a.k.a。二进制比较(
ignoreCase="false"
)更便宜。 - 寻找
0
寻找{SERVER_PORT_SECURE}
比寻找off
寻找{HTTPS}
便宜。