我试图在我的webapp上使用http / 2。 问题是我的websocket连接在使用http / 2时似乎不起作用。
我使用的是一个javascript文件
var webSocket = new WebSocket('wss://xxx.de:8443/urlto/websocket');
和server.xml中的Tomcat Connector如下所示:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="/path/to/privkey.pem"
certificateFile="/path/to/cert.pem"
certificateChainFile="/path/to/chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
当像这样启动服务器时,我收到错误connection closed before receiving a handshake response
如果我不包含<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
部分,则websocket连接没有问题。
答案 0 :(得分:2)
没有为HTTP / 2定义WebSocket握手,因此如果您想使用ws,则需要使用HTTP / 1.1。
有一个RFC试图在HTTP / 2上定义WS,但它从未完成。它已被https://datatracker.ietf.org/doc/draft-mcmanus-httpbis-h2-websockets/取代,我们必须看看这是否会如此。