HttpProtocols枚举值 | 允许的连接协议 |
---|---|
Http1 | 仅限 HTTP/1.1。可以在有或没有 TLS 的情况下使用。 |
Http2 | 仅限 HTTP/2。仅当客户端支持先验知识模式时,才可以在没有 TLS 的情况下使用。 |
Http1AndHttp2 | HTTP/1.1 和 HTTP/2。HTTP/2 要求客户端在 TLS应用层协议协商 (ALPN)握手中选择 HTTP/2;否则,连接默认为 HTTP/1.1。 |
协议协商
TLS 不仅仅用于保护通信。当端点支持多种协议时,TLS应用层协议协商 (ALPN)握手用于协商客户端和服务器之间的连接协议。此协商确定连接是使用 HTTP/1.1 还是 HTTP/2。
如果 HTTP/2 端点配置为没有 TLS,则端点的ListenOptions.Protocols必须设置为HttpProtocols.Http2。HttpProtocols.Http1AndHttp2如果没有 TLS,则无法使用具有多个协议(例如 )的端点,因为没有协商。与不安全端点的所有连接默认为 HTTP/1.1,并且 gRPC 调用失败。
有关使用 Kestrel 启用 HTTP/2 和 TLS 的更多信息, 请参阅Kestrel 端点配置 。
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http1AndHttp2"
}
}