unexpected net failed error err_invalid_http_response during code java javascript tomcat websocket spring-websocket

java - net - Obtengo un estado 200 cuando me conecto al websocket, pero es un error



websocket connection error during websocket handshake (6)

Mi error aparece en la consola de mi navegador:

"WebSocket connection to ''ws://localhost:32768/DspClusterWebServices/myHandler'' failed: Unexpected response code: 200"

Estoy usando Spring Websockets 4.1.5 y Tomcat 8.0.18 . Mi clase de implementación WebSocketConfigurer se ve así:

@Configuration @Controller @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { class MyHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("afterConntectionEstablished called"); } ...implements rest of functions with a System.out.println and false for supportsPartialMessages() } } @Override registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "myHandler").withSockJS(); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } }

Mi testWebsocketClient.js intenta conectarse con este código, pero tiene un código de error de 200:

websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");

No puedo averiguar qué intentar a continuación. ¿Pensé que esto provocaría que se activara el método afterConnectionEstablished (sesión de WebSocketSession)? ¿No es bueno el código 200?


Como mi otra respuesta: [ https://.com/a/53272666/2930417][1] [ https://.com/a/53272666/2930417][1]

Yo uso springboot 2 + STOMP。

eliminar .withSockJS() , entonces todo está bien.

No sé la razón, pero funciona para mí.


Compruebe que si ''ws: // localhost: 32768 / DspClusterWebServices / myHandler'' es correcto.


Echa un vistazo a la specification . El servidor debe responder con 101 para indicar el cambio de protocolo de http a ws .


No sé si esto es demasiado tarde, pero una solución con la que me topé es simplemente agregar la cadena /websocket después del punto final de websocket que declaró en el servidor de arranque Spring. Esto ayudará a mantener tanto la lógica de reenvío como a conectar y establecer una conexión websocket.


Para aquellos tipos como yo que usan angular + springboot y obtuvieron este error. compruebe si ha habilitado la redirección o reenvío todas las solicitudes de puntos finales que no sean API a index.html. me gusta:

@RequestMapping(value = "/**/{[path:[^//.]*}") public String redirect() { // Forward to home page so that route is preserved. return "forward:/index.html"; }

Si lo haces, desactívalo y obtendrás 101.


Por favor, consulte this !

Después de agregar /websocket (a su URL), le dará el error

Error al analizar el valor del encabezado de origen [nulo]

;), que a su vez lo llevará a github.com/spring-projects/spring-boot/issues/2586 .

Tendrá que agregar .setAllowedOrigins("*") a su método addHandler() , ¡y finalmente podría funcionar!