Lors de la connexion au client WebSocket basé sur REACT à Java serveur Web Socket basé sur Jetty, je reçois l'erreur ci-dessous -
WebSocket connection to 'ws://localhost:2319/ws' failed: Error during WebSocket handshake: Unexpected response code: 302
Cette erreur n'existe pas lors de la connexion via le client Smart Web Socket de Chrome.
J'essaie de développer Web Socket Client basé sur REACT. Le code client est -
var connection = new WebSocket('ws://localhost:2319/ws');
connection.onopen = function () {
// connection is opened and ready to use
};
WebSocket Server est basé sur Jetty. Le code du serveur est -
server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(SSConstants.WWBSOCKET_PORT);
server.addConnector(connector);
// Setup the basic application "context" for this application at "/"
// This is also known as the handler tree (in jetty speak)
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/ws"); // Set to "/ws" for future integration with the main jetty server.
server.setHandler(context);
try {
// Initialize javax.websocket layer
ServerContainer wsContainer = WebSocketServerContainerInitializer.configureContext(context);
// Add WebSocket endpoint to javax.websocket layer
wsContainer.addEndpoint(WebsocketListener.class);
server.start();
}
catch (Throwable t) {
ssLogger.logInfo("Websocket Server start exp : ");
t.printStackTrace(System.err);
}
Production -
WebSocket connection to 'ws://localhost:2319/ws' failed: Error during WebSocket handshake: Unexpected response code: 302
Request URL:ws://localhost:2319/ws
Request Method:GET
Status Code:302 Found
Response Headers
view source
Content-Length:0
Date:Fri, 11 Aug 2017 18:51:42 GMT
Location:http://localhost:2319/ws/
Server:Jetty(9.3.8.v20160314)
Request Headers
view source
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:Upgrade
Host:localhost:2319
Origin:https://localhost:1338
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:2OZooIjOX7G6kgNpPOz9Fw==
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36
Name
ws://localhost:2319/ws
N'est pas l'URL/URI de point de terminaison valide, il veut rediriger vers la bonne pour votre contextPath
déclaré de /ws
C'est ce que la redirection 302 vous dit ...
Location: http://localhost:2319/ws/
Disons que votre WebsocketListener
est déclaré comme @ServerEndpoint("/ws")
, et nous utilisons votre ServletContext
à contextPath
de "/ws"
Ce qui signifierait votre URL/L'URI pour accéder à ce point de terminaison websocket est ...
ws://localhost:2319/ws/ws
Ou dit d'une manière différente ...
ws://<Host>:<port>/<contextPath>/<endpointPath>