WebSocket连接到'ws:// localhost:52312 /'失败:WebSocket握手期间出错:意外的响应代码:200

WebSocket连接到'ws:// localhost:52312 /'失败:WebSocket握手期间出错:意外的响应代码:200

问题描述:

我试图实现一个简单的HTML5 WebSocket,但连接根本没有建立&我越来越下面误差的WebSocket对象被创建WebSocket连接到'ws:// localhost:52312 /'失败:WebSocket握手期间出错:意外的响应代码:200

WebSocket连接到 'WS://本地主机:52312 /' 失败:WebSocket的握手期间错误:意外响应代码:200

下面是代码

document.addEventListener("DOMContentLoaded", function (event) { 
     function runHub() { 
      if ("WebSocket" in window) { 

       console.log('WebSocket is supported by your browser.'); 

       //var serviceUrl = 'ws://localhost:52312/'; 
       var serviceUrl = 'ws://localhost:52312/home/GetNotificationCount'; 

       var protocol = 'Chat-1.0'; 
       var socket = new WebSocket(serviceUrl); 

       socket.onopen = function() { 
        console.log('Connection Established!'); 
       }; 

       socket.onclose = function (error) { 
        console.log('Connection Closed!'); 
        console.log('Error Occured: ' + JSON.stringify(error)); 
       }; 

       socket.onerror = function (error) { 
        console.log('Error Occured: ' + JSON.stringify(error)); 
       }; 

       socket.onmessage = function (e) { 
        if (typeof e.data === "string") { 
         console.log('String message received: ' + e.data); 
        } 
        else if (e.data instanceof ArrayBuffer) { 
         console.log('ArrayBuffer received: ' + e.data); 
        } 
        else if (e.data instanceof Blob) { 
         console.log('Blob received: ' + e.data); 
        } 
       }; 


       if (!socket.readyState === WebSocket.CLOSED) { 
        socket.send($('#notificationCount').text); 
        //socket.close(); 

       } 

      } 
     } 

     var run = setInterval(function() { 
      runHub(); 
     }, 10000) 
    }); 

有没有人有这方面的想法?

+1

你连接了什么?看起来像你没有连接到想要websocket连接的东西,就像一个普通的web服务器。 – xaxxon

根据https://tools.ietf.org/html/rfc6455#section-4.1

一旦客户端的开放握手已发送,客户端必须 等待从服务器发送任何数据之前的响应。 客户端必须如下验证服务器的响应:

  1. 如果从服务器接收到的状态代码是不是101, 客户端处理每HTTP [RFC2616]程序的响应。特别是,如果 接收到401状态码,则客户端可能会执行验证;服务器可能会使用3xx状态码重定向客户端 (但客户端不需要遵循 ),否则,请按以下步骤操作。

4.2.2节详解:除了与代码101和适当的报头响应,服务器可以请求authenication(响应码401),可能会重定向(3XX代码),并且如果尝试应该执行TLS握手建立安全连接(如果使用wss://协议)。

位于localhost:52312的服务器回应了代码200 - 正如您在上面看到的,websocket标准没有在此响应中定义任何意义。所以客户提出异常是正确的。问题出在服务器上。