相关疑难解决方法(0)

如何从JavaScript中拒绝WebSocket打开握手读取状态代码?

我用JavaScript创建了一个WebSocket客户端

if ("WebSocket" in window) {            
    ws = new WebSocket(url);
    ws.binaryType = "arraybuffer";      
} else if ("MozWebSocket" in window) {  
    ws = new MozWebSocket(url);
    ws.binaryType = "arraybuffer";  
}
Run Code Online (Sandbox Code Playgroud)

和WebSocket服务器应用程序.在某些情况下,我将服务器编程为拒绝连接请求并提供错误代码.

在例如Firefox控制台中,然后会显示一条消息

Firefox can't establish a connection to the server at ws://123.123.123.123:1234/.
Run Code Online (Sandbox Code Playgroud)

它提供了状态代码

HTTP/1.1 403 
Run Code Online (Sandbox Code Playgroud)

这是我的WebSocket服务器发送的错误代码.

我的问题是:如何在JavaScript客户端中读取此状态代码?

ws.onerror = function(e) {
    console.log(e);     
};   
ws.onclose = function(e) {
    console.log(e); 
};
Run Code Online (Sandbox Code Playgroud)

都被调用,但没有任何Event对象包含此错误代码.

javascript websocket

15
推荐指数
1
解决办法
4662
查看次数

拦截(并可能拒绝)Web 套接字升级请求

我有一个 Node.js 服务器,我正在向其发送 Web 套接字升级请求。此请求的授权标头包含登录信息,我需要将其与数据库条目进行比较。我不确定如何阻止 Web 套接字连接打开,直到执行数据库查询回调之后。

以下是我目前正在做的事情的简化:

var Express = require('express')
var app = Express() 
server = app.listen(app.get("port"), function () {})
server.on("upgrade", function (request, socket) {
//Query database
//On success set "authenticated" flag on request (later accessed through socket.upgradeReq)
//On failure abort connection
})
Run Code Online (Sandbox Code Playgroud)

这是可行的,但有一段短暂的时间,套接字处于打开状态,但我尚未验证授权标头,因此恶意用户可能会发送/接收数据。我通过使用“经过身份验证”标志来减轻实施中的这种风险,但似乎必须有更好的方法。

我尝试了以下操作,但是虽然它们似乎拦截了除升级请求之外的所有请求:

Attempt #1: 
app.use(function (request, response, next) {
//Query database, only call next if authenticated
next()
})

Attempt #2:
app.all("*", function (request, response, next) {
//Query database, only call next if authenticated
    next()
}) …
Run Code Online (Sandbox Code Playgroud)

websocket node.js express

7
推荐指数
1
解决办法
5057
查看次数

标签 统计

websocket ×2

express ×1

javascript ×1

node.js ×1