web-dev-qa-db-fra.com

Je reçois le statut 200 lors de la connexion à la prise Web, mais est-ce une erreur?

Mon erreur apparaît dans la console de mon navigateur:

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

J'utilise Spring Websockets 4.1.5 et Tomcat 8.0.18. Ma classe d'implémentation WebSocketConfigurer se présente comme suit:

@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();
   }
}

Mon testWebsocketClient.js essaie de se connecter avec ce code, mais a un code d'erreur de 200:

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

Je ne peux pas trouver quoi essayer ensuite. Je pensais que cela provoquerait le déclenchement de la méthode afterConnectionEstablished (WebSocketSession session)? Le code 200 n'est-il pas bon?

30
smuggledPancakes

S'il vous plaît vérifier http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket !

Après avoir ajouté /websocket (À votre URL), cela vous donnera l’erreur

Échec de l'analyse de la valeur de l'en-tête Origin [null]

;), qui vous mènera ensuite à ce lien .

Vous devrez ajouter .setAllowedOrigins("*") à votre méthode addHandler(), et cela pourrait enfin fonctionner!

31
xerx593

Regardez le spécification . Le serveur doit répondre avec 101 pour signaler le changement de protocole de http à ws.

8
Hannes

Comme mon autre réponse: [ https://stackoverflow.com/a/53272666/2930417] [1]

J'utilise springboot 2 + STOMP

remove .withSockJS(), alors tout va bien.

Je ne connais pas la raison, mais travaille pour moi.

6
hatanooh

Je ne sais pas si c'est trop tard, mais une solution sur laquelle je suis tombé est simplement d'ajouter la chaîne /websocket après le noeud final Websocket que vous avez déclaré dans le serveur de démarrage Spring. Cela vous aidera à conserver la logique de transfert, à vous connecter et à établir une connexion Websocket.

2
Henry

Vérifiez que si 'ws: // localhost: 32768/DspClusterWebServices/myHandler' est correct.

2
Yang Peiyong

Pour les gars comme moi qui utilisent angular + springboot et obtenu cette erreur. Veuillez vérifier si vous avez activé la redirection ou transférer toute demande de point de terminaison non api à index.html. Comme:

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

Si vous le faites, désactivez-le et vous obtiendrez 101

2
Shuai Wang