Ошибка во время рукопожатия WebSocket: неожиданный код ответа: 302

5

При подключении к клиенту WebSocket на основе REACT к серверу Socket Socket Java Jetty я получаю ошибку ниже -

WebSocket connection to 'ws://localhost:2319/ws' failed: Error during WebSocket handshake: Unexpected response code: 302

Эта ошибка не существует при подключении через клиент Chrome Smart Web Socket.

Я пытаюсь создать клиент Web Socket на основе REACT. Клиентский код -

var connection = new WebSocket('ws://localhost:2319/ws');
     connection.onopen = function () {
     // connection is opened and ready to use
    };

Сервер WebSocket основан на Jetty. Код сервера -

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

Выход -

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
Теги:
websocket
jetty

1 ответ

4

ws://localhost:2319/ws не является допустимым URL-адресом конечной точки /URI, он хочет перенаправить на правильный для объявленного contextPath of /ws

Это то, что говорит вам переадресация 302...

Location: http://localhost:2319/ws/

WebsocketListener ваш WebsocketListener объявлен как @ServerEndpoint("/ws"), и мы используем ваш ServletContext в contextPath of "/ws", что означает, что ваш URL/URI для доступа к этой конечной точке веб-узла...

ws://localhost:2319/ws/ws

Или сказал по-другому...

ws://<host>:<port>/<contextPath>/<endpointPath>

  • 0
    Спасибо за это. Заставил меня понять, что я использовал неправильное местоположение ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню