我一直在尝试让windows上的curl版本7.63连接到HTTP/2 REST api并使用Windows身份验证。
REST端点被设置为执行“协商”,并在“加入域”的windows服务器上运行。因此,它将从Windows DC KDC获得kerberos委派。
这一切都适用于http/1.1,但如果我尝试强制curl使用http/2,它将恢复到http/1.1
当我使用“基本”身份验证时,curl可以使用http/2连接到rest端点。
我发现这篇博文来自微软的一位前IIS工程师,他说IIs不支持使用Windows身份验证的Http/2。https://blogs.iis.net/davidso/http2
由于我的REST端点在标头中使用以下内容进行响应: Server: Microsoft-HTTPAPI/2.0
我相信它使用与IIS相同的库,这可能是它不能处理Windows身份验证的原因(需要Windows身份验证来处理SSO,这样用户就不需要输入他的凭据)。
这是http/2规范中的限制,还是仅仅是microsoft库和IIS中的限制?
curl 7.63.0 (x86_64-w64-mingw32) libcurl/7.63.0 OpenSSL/1.1.1a (WinSSL) zlib/1.2.11 libinn2/2.0.5nghttp2/1.35.1发布日期: 2018-12-12协议: dict文件ftp ftps gopher http https imap imap ldaps pop3 pop3s rtsp smtp smtps telnet tftp功能: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz TLS-SRP HTTP2代理MultiSSL Metalink
发布于 2019-02-20 02:59:03
在少数情况下,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中,选择站点,在操作窗格的配置下选择'Limits‘)。这适用于HTTP/1.1,但不适用于HTTP/2 (将不会出现错误或带宽限制)。
https://stackoverflow.com/questions/53860945
复制相似问题