在IIS中实施HTTPS,而无需使用缓存不安全的服务器变量

问题描述

我目前正在使用以下规则在网站上实施https:

<rule name="Enforce HTTPS" enabled="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTPS}" ignoreCase="true" pattern="^off$" />
  </conditions>
  <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>

问题是我在这种情况下使用的HTTPS服务器变量不是“不会对输出缓存策略造成任何影响”(see full list)的服务器变量列表的一部分。

这是一个问题,原因是在设置了一些失败的请求跟踪规则之后,我意识到某些条目具有以下警告: REWRITE_DISABLED_KERNEL_CACHE

enter image description here

经过研究,我发现一个相关的forum thread提到:

如果URL重写模块中的任何规则,URL重写模块将禁用内核模式缓存 规则集的条件是使用了缓存不安全的服务器变量。的 无论请求的URL是否与 规则模式。

如果性能不是问题,这不是问题,但是站点的运行速度不是那么快,我想知道此缓存问题是否不是问题的一部分。

通过阅读安全变量列表,似乎没有一个包含用于请求的协议,因此这似乎不可能,但我仍然以为以防万一。

解决方法

我们可以绕过HTTP协议使用HTTPS访问网站,然后使用IIS日志查看网站的访问记录,其中每个记录都包含访问的时间消耗。

Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs- 
version cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken  

2020-04-15 02:50:57 fe80::a4fe:6d79:f2b8:d031%6 GET / - 446 - 
fe80::a4fe:6d79:f2b8:d031%6 HTTP/2 Mozilla/5.0+ 
(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+ 
(KHTML,+like+Gecko)+Chrome/80.0.3987.163+Safari/537.36
- 403 14 0 2158

最后一个字段指示在一个请求中花费的时间。
我认为仅检查HTTPS服务器变量并重定向URI时,IIS输出缓存不会对IIS网站访问性能产生重大影响。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...