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)
});
有没有人有这方面的想法?
答
根据https://tools.ietf.org/html/rfc6455#section-4.1
一旦客户端的开放握手已发送,客户端必须 等待从服务器发送任何数据之前的响应。 客户端必须如下验证服务器的响应:
- 如果从服务器接收到的状态代码是不是101, 客户端处理每HTTP [RFC2616]程序的响应。特别是,如果 接收到401状态码,则客户端可能会执行验证;服务器可能会使用3xx状态码重定向客户端 (但客户端不需要遵循 ),否则,请按以下步骤操作。
4.2.2节详解:除了与代码101和适当的报头响应,服务器可以请求authenication(响应码401),可能会重定向(3XX代码),并且如果尝试应该执行TLS握手建立安全连接(如果使用wss://
协议)。
位于localhost:52312
的服务器回应了代码200 - 正如您在上面看到的,websocket标准没有在此响应中定义任何意义。所以客户提出异常是正确的。问题出在服务器上。
你连接了什么?看起来像你没有连接到想要websocket连接的东西,就像一个普通的web服务器。 – xaxxon