通过 HTTP 访问暴露在 HTTPS 上的服务超时 130 秒

通过 HTTP 访问暴露在 HTTPS 上的服务超时 130 秒

我有 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 组件上设置适当的超时值。此文档中提到了一些默认值和参数;

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/31a2f39c-4d59-4cba-905c-60e7af657e49.mspx?mfr=true

相关内容