Как обработать метод подключения в http-прокси узла, чтобы разрешить подключение через веб-сокет через прокси? - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь создать 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 через мой прокси

...