在Windows 10中禁用HTTP/2 / SPDY在HTTP.SYS和IIS中的使用

13

在Windows 10上进行测试时,我们看到了很多以前的Windows版本中没有见过的浏览器不兼容性问题。有些浏览器可以工作,但其他浏览器会报告ERR_SPDY_PROTOCOL_ERROR错误。我快速搜索了一下这个问题,发现我并不孤单。

我的应用程序使用WWSAPI和HTTP.SYS与HTTPS(TLS)。有谁知道如何在Windows 10上禁用WWSAPI(它正在使用HTTP.SYS)中的SPDY / HTTP/2?

我还希望获得一个最新的Windows 10 HTTP.SYS注册表设置列表。

请参见下面我的答案。希望这对其他人有所帮助。

马克


2
这是一个问答网站。因此,如果您有涉及StackOverflow主题且尚未得到解答的问题,请发布一个问题,并在问题中阐述您最初遇到的问题,然后发布一个回答,在其中描述解决方案。 - Michael
除了禁用HTTP/2之外,我想了解为什么您的WWSAPI在(我推测)Chrome中生成ERR_SPDY_PROTOCOL_ERROR。您是否有一个显示这种情况发生的WWSAPI示例? - Mike Bishop
这是一个Chromium错误。我们目前在Opera,Chrome和Vivaldi中看到它。在我们的情况下,我认为有人发送了一个信号,告诉我们提供http2,而实际上我们并没有。 - Erik Reppen
可能是如何在Windows 10的IIS上禁用HTTP/2的重复问题。 - William Gross
1个回答

21

编辑:禁用HTTP/2会显着降低您的网站速度,这不是永久解决方案。问题实际上是由我们的 webapp 发送错误的身份验证头到服务器引起的。

如果仍要禁用 HTTP/2,请参见以下内容。

(OP 给出了有用的答案,但在问题中。我将答案移动了):

我通过配置 Windows 10 的 HTTP.SYS 在注册表中禁用 HTTP/2 来解决了我的 HTTP/2 问题。鉴于我在任何地方都找不到信息,我想在这里分享我对该问题的解决方案。不过,我希望能够通过 WWSAPI 的方式来做到这一点。

如果我关闭客户端浏览器中的 SPDY 支持,它将工作,但我希望在服务器端(Windows 10 上的 HTTP.SYS)关闭此功能,以便它不会协商 HTTP/2,而是使用更兼容的旧版 HTTP(S)。

在以下位置发现了 HTTP.SYS 的两个新注册表设置:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

  • EnableHttp2Tls REG_DWORD 0
  • EnableHttp2Cleartext REG_DWORD 0

在 Windows 10 中添加这些值并将两者都设置为 0,导致未协商 HTTP/2 / SPDY,并且我的 ERR_SPDY_PROTOCOL_ERROR 问题消失了,无需更改浏览器配置。我并不是在暗示 Windows 10 的 HTTP/2 存在任何问题,问题可能出现在某些浏览器上。

这也可能适用于 IIS,但我没有使用过它,因此我没有尝试过,在任何情况下,在 IIS 中有可能有更好的方法来解决此问题。

希望这对其他人也有所帮助。

我可以确认这对 IIS 也有帮助,但我必须重新启动计算机


设置注册表数值并重启计算机后,我发现我的 SPDY 问题的根本原因是来自服务器的连接重置。 - Eddie Fletcher
现在我在想,如果我们想关闭SPDY而不关闭HTTP/2会怎样? - sshirley
@Zero3 在我的电脑上禁用SDPY强制连接再次使用HTTP/1.1。当我运行之前返回ERR_SPDY_PROTOCOL_ERROR的相同API调用时,Chrome现在告诉我连接被重置了。修复导致连接重置的错误后,我可以重新启用SPDY而不会出现协议错误。 - Eddie Fletcher
1
我也可以确认,在运行IIS 10.0的Windows Server 2014上,这个方法是有效的。看起来,HTTP/2与某些密码结合使用会导致现代浏览器抛出安全异常。禁用HTTP/2可以通过强制IIS使用相同的密码来使用TLS 1.2来解决此问题。这显然比打开HTTP/2选项标志更安全。 - Jason
2
有没有办法关闭SPDY而不关闭HTTP2?@Jason - airowe
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接