Node.js 如何在node';s http代理是否允许通过代理连接websocket?
我正在尝试使用Node.js 如何在node';s http代理是否允许通过代理连接websocket?,node.js,websocket,node-http-proxy,Node.js,Websocket,Node Http Proxy,我正在尝试使用节点HTTP代理模块创建一个HTTP代理服务器,但我还希望在代理服务器中支持WebSocket。为此,我在upgrade方法上注册了一个事件监听器,如下面的代码,如果我将本地代理服务器的URL传递给WebSocket的代理密钥,它将非常有效 httpServer.on("upgrade", function(req, sock, head) { console.log("upgrade called") let reqUrl = req.url let h
节点HTTP代理
模块创建一个HTTP代理服务器,但我还希望在代理服务器中支持WebSocket。为此,我在upgrade
方法上注册了一个事件监听器,如下面的代码,如果我将本地代理服务器的URL传递给WebSocket的代理密钥,它将非常有效
httpServer.on("upgrade", function(req, sock, head) {
console.log("upgrade called")
let reqUrl = req.url
let hostPath = reqUrl.split("//")[1]
let wsUrl = `ws://${hostPath}`
proxy.ws(req,sock,head, {
target: wsUrl,
ws: true,
autoRewrite: true,
changeOrigin: true
})
})
但当我在google chrome中使用本地proxyServer的URL作为HTTP代理URL,然后尝试使用任何WebSocket代码时,它不会调用我的代理的升级方法,相反,chrome调用connect方法。因此,我还监听了HTTP服务器的connect
方法,并在connect方法的回调中进行了少量修改,编写了相同的代码。你可以在下面看到我的代码
httpServer.on("connect", (req, clientSocket, head) => {
console.log("connect called")
let reqUrl = req.url
let wsUrl = `ws://${reqUrl}`
proxy.ws(req,clientSocket,head,
{
target: wsUrl,
ws: true,
autoRewrite: true,
changeOrigin: true
})
})
但我的代理仍然不适用于WebSocket。如果我尝试运行varws=newwebsocket('ws://echo.WebSocket.org/')
在浏览器控制台中,然后我得到以下错误WebSocket连接到'ws://echo.WebSocket.org/'失败:连接建立错误:net::ERR_EMPTY_RESPONSE
这次调用connect方法时,服务器端没有错误,但客户端的WebSocket未连接
所以我想知道,如何处理connect
方法来允许通过代理连接WebSocket