2017-12-01 1 views
0

webapp에 http/2를 사용하려고했습니다. 문제는 http/2를 사용할 때 websocket 연결이 작동하지 않는 것입니다.Tomcat 9 http/2 웹 소켓

<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

말하는 오류를 얻을 :

내가 var webSocket = new WebSocket('wss://xxx.de:8443/urlto/websocket');

및 server.xml의 내 톰캣 커넥터가 내장 된 자바 스크립트 파일을 사용은 다음과 같습니다

<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> 부분을 포함하지 않으면 websocket이 문제없이 연결됩니다.

답변

2

웹 소켓 핸드 셰이크가 HTTP/2에 정의되어 있지 않으므로 ws를 사용하려면 HTTP/1.1을 사용해야합니다.

HTTP/2에서 WS를 정의하려고 시도한 RFC가 있었지만 완료되지 않았습니다. 그것은 https://datatracker.ietf.org/doc/draft-mcmanus-httpbis-h2-websockets/으로 바뀌 었습니다. 이것이 우리가 될 것인지를 알아봐야 할 것입니다.