我有 Windows 客户端应用程序和 Windows 服务,它们通过 HTTPS 托管 Web 服务(在它背后使用标准 http.sys)。除了用户犯错并使用 HTTP 和 HTTPS 端口访问服务的情况外,一切都正常。例如,服务公开在:https://somehost:9000
但用户错误地设置了http://somehost:9000
。
通常,如果端点不可用,客户端会收到 404 Not found,但在这种情况下,端点可用,但主机需要先进行 SSL\TLS 握手。当客户端使用纯 HTTP 调用服务时,它会挂起,客户端等待超时。此外,我发现这是某种全局行为,因为通过 HTTPS 在 IIS 上公开的 Web 服务通过浏览器使用 HTTP 调用的行为完全相同。超时始终为 130 秒。IIS 上的连接的保持活动配置为 120 秒,因此看起来不相关。
在这种情况下使用哪种超时? 是否可以更改它(这个问题有点抽象,因为我还不知道我想更改什么)?
答案1
我认为你可以使用 URL 重写模块,它可以有点儿透明重定向到正确的协议;以下是一些详细信息
安装并启用 URL 重写,并将 ISS 虚拟站点配置为不需要 SSL,以便它可以处理 HTTP 请求,并将 http 重定向发送回,如下https://
所示
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
此策略比对系统范围的 TCP 参数进行可能重大的更改要好。
另一种方法是在应用程序中的 http.sys 组件上设置适当的超时值。此文档中提到了一些默认值和参数;