我已经设置了 https在我们的 Azure DevOps Server 2020.0.1 上,并希望 IIS 通过 http/2 为网站提供服务。使用基于 Chromium 的浏览器(Chrome、Edge)浏览网站时,所有内容均通过 http/1.1 提供。使用 Firefox 浏览时,网站的静态内容通过 http/2 提供,api 生成的内容通过 http/1.1 提供。
我希望所有提及的浏览器中的所有内容都通过 http/2 提供。这可能吗?
操作系统是Windows Server 2016。
答案1
并非所有 IIS 功能都支持 HTTP/2,因此有时您的浏览器只能通过 HTTP 1.1 进行连接。Microsoft 记录了以下场景这,
何时不支持 HTTP/2?
在少数情况下,HTTP/2 不能与其他功能结合使用。在这些情况下,Windows 将回退到 HTTP/1.1 并继续事务。这可能涉及在握手期间协商 HTTP/1.1,或向客户端发送错误代码,指示其通过 HTTP/1.1 连接重试。
- HTTP/2 不支持 Windows 身份验证 (NTLM/Kerberos/Negotiate)。在这种情况下,IIS 将回退到 HTTP/1.1。
- 明文 - 如上所述,IIS 目前仅支持基于 TLS 的 HTTP/2。同样,IIS 将回退到 HTTP/1.1。
- 带宽限制 - IIS 具有限制带宽的功能(在 Inetmgr 中,选择站点,在操作窗格的配置下选择“限制”)。这适用于 HTTP/1.1,但不适用于 HTTP/2(将继续进行,不会出现任何错误或带宽限制)。
答案2
这是我在“为什么 Chrome 使用 http/1.1 探索”中发现的。这似乎是一个已知错误,即 Chromium 会回退到 http/1.1。
https://bugs.chromium.org/p/chromium/issues/detail?id=832586