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

时间:2017-10-09 06:11:05

标签: html5 sockets websocket

我正在尝试实现一个简单的HTML5 WebSocket,但是连接根本没有建立起来&我在创建WebSocket对象时遇到错误

  

WebSocket连接到' ws:// localhost: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 个答案:

答案 0 :(得分:2)

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

  

一旦发送了客户端的开放握手,客户端就必须      在发送任何进一步的数据之前等待服务器的响应。      客户端必须按如下方式验证服务器的响应:

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

第4.2.2节详细说明:除了使用代码101和相应的标头进行响应之外,服务器可能会要求进行身份验证(响应代码401),可能会重定向(3xx代码),并且如果您尝试建立安全连接,则应执行TLS握手(如果您使用wss://协议)。

位于localhost:52312的服务器响应代码200 - websocket标准,如上所示,并未在此响应中定义任何意义。因此,客户提出异常是正确的。问题出在服务器上。