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

在Windows 10中禁用HTTP.SYS和IIS中的HTTP/2/SPDY,iis,windows-10,http2,http.sys,wwsapi,Iis,Windows 10,Http2,Http.sys,Wwsapi,在Windows10上进行测试时,我们看到了很多浏览器不兼容的地方,这是我以前没有见过的。一些浏览器可以工作,但其他浏览器会报告ERR_SPDY_PROTOCOL_ERROR。我对这个问题的快速搜索表明我并不孤单 我的应用程序使用WWSAPI和HTTP.SYS以及HTTPS(TLS)。有人知道如何在Windows10上禁用WWSAPI(使用HTTP.SYS)中的SPDY/HTTP/2吗 我还想获得HTTP.SYS注册表设置的完整最新Windows 10列表 我的答案见下文。希望这对其他人也有帮助

在Windows10上进行测试时,我们看到了很多浏览器不兼容的地方,这是我以前没有见过的。一些浏览器可以工作,但其他浏览器会报告ERR_SPDY_PROTOCOL_ERROR。我对这个问题的快速搜索表明我并不孤单

我的应用程序使用WWSAPI和HTTP.SYS以及HTTPS(TLS)。有人知道如何在Windows10上禁用WWSAPI(使用HTTP.SYS)中的SPDY/HTTP/2吗

我还想获得HTTP.SYS注册表设置的完整最新Windows 10列表

我的答案见下文。希望这对其他人也有帮助


Mark

编辑:禁用HTTP/2将显著降低网站速度,这不是一个永久性的解决方案。这个问题原来是由我们的webapp向服务器发送错误的身份验证头引起的

要仍然禁用HTTP/2,请参见下文

(OP给出了一个有用的答案,但在问题中,我提出了答案):

我确实通过配置Windows10http.SYS解决了HTTP/2问题 在注册表中禁用HTTP/2。考虑到我没有找到信息 在任何地方,我想我也会在这里分享我对这个问题的解决方案。我 我想通过WWSAPI找到一种方法

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

在中发现HTTP.SYS的两个新注册表设置:

HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

  • 启用http2tls
    REG\u DWORD
    0
  • 启用http2cleartext
    REG\u DWORD
    0
在Windows 10中添加这些值并将两者设置为0会导致 HTTP/2/SPDY未协商和我的错误协议错误 问题消失了,不需要更改浏览器配置。 我并不是说Windows10HTTP/2有什么问题 某些浏览器可能存在问题

这可能也适用于IIS,但我不使用它,所以我没有尝试过 无论如何,在IIS中可能有更好的方法来实现这一点

希望这对其他人也有帮助


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

这是一个问答网站。因此,如果您有关于StackOverflow主题的问题,但尚未得到回答,请在您最初提出问题的地方发布一个问题,然后在您描述解决方案的地方发布该问题的答案。除了禁用HTTP/2,我想了解为什么您的WWSAPI会在(我猜)Chrome中生成ERR_SPDY_PROTOCOL_ERROR。您是否有WWSAPI样本表明发生了这种情况?这是一个错误。我们现在在Opera、Chrome和Vivaldi中看到了它。在我们的例子中,因为我认为有人在发送一个信号,而我们提供的是http2,而我们没有。在设置注册表值并重新启动计算机后,我发现我的SPDY问题的根本原因是来自服务器的连接重置。尽管现在我想知道,如果我们想关闭SPDY而不是HTTP/2怎么办?@EddieLoeffen想详细说明一下吗?我也可以确认这对运行IIS 10.0的Windows Server 2014有效。HTTP/2与某些密码结合使用,似乎会导致现代浏览器引发安全异常。禁用HTTP/2可以通过强制IIS使用具有相同密码的TLS 1.2来修复此问题。这显然比上的HTTP/2选项标志更安全。有没有办法只关闭SPDY而不关闭HTTP2@杰森