Я пытаюсь создать HTTP-прокси-сервер с использованием модуля node-http-proxy
, но я также хочу поддерживать 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
})
})
Но когда я использую свой локальныйURL-адрес proxyServer в google-chrome в качестве URL-адреса HTTP-прокси, а затем попытайтесь использовать любой код WebSocket, после чего он не вызывает метод обновления моего прокси-сервера, вместо этого chrome вызывает метод connect.Поэтому я также слушаю метод connect
моего HTTP-сервера и написал тот же код с небольшими изменениями в обратном вызове метода 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
})
})
Но все же мой прокси не работает для WebSockets.Если я пытаюсь запустить var ws=new WebSocket('ws://echo.websocket.org/');
в консоли браузера, я получаю следующую ошибку WebSocket connection to 'ws://echo.websocket.org/' failed: Error in connection establishment: net::ERR_EMPTY_RESPONSE
На этот раз метод соединения был вызван без ошибок на стороне сервера, но WebSocket клиента не подключен
Итак, я хочу знатьКак мне обработать метод connect
, чтобы разрешить подключение через WebSocket через мой прокси