2013-08-20 3 views
0

Если создать простой сервер в Node.jsЧто делать с событием CONNECT?

var httpServer = http.createServer(callback); 

httpServer.on('connect', function(req, socket, head){ 
    console.log('connect'); 
}); 

httpServer.listen(3128, '192.168.0.2'); 

Что я должен делать, когда я получаю connect событие?

фон

  • Это будет прокси-сервер, служащий HTTP и HTTPS
  • Клиенты подключаются по порту 3128
  • Когда клиент делает запрос HTTPS connect событие запускаемое

В идеале, что я хотел бы сделать, прокси-запрос на конечный сервер, а затем дать клиенту ответ.

Но я не вижу никакого API для этого. Обратный вызов connect не имеет обычных аргументов (request, response), вместо этого он принимает (request, socket, head).

Как выполнить запрос и выдать ответ?

+0

Возможно, посмотрите, как это делает [http-proxy] (https://github.com/nodejitsu/node-http-proxy)? – josh3736

ответ

4

Ответ переписан с нуля

Вот простой пример.
connect обработчик события прошел socket объект, который мы должны связать с разъемом удаленного подключения.

httpServer.on('connect', function(req, socket, head) { 
    var addr = req.url.split(':'); 
    //creating TCP connection to remote server 
    var conn = net.connect(addr[1] || 443, addr[0], function() { 
    // tell the client that the connection is established 
    socket.write('HTTP/' + req.httpVersion + ' 200 OK\r\n\r\n', 'UTF-8', function() { 
     // creating pipes in both ends 
     conn.pipe(socket); 
     socket.pipe(conn); 
    }); 
    }); 

    conn.on('error', function(e) { 
    console.log("Server connection error: " + e); 
    socket.end(); 
    }); 
}); 
+0

Спасибо, но не полезно. Я говорю об обслуживании запросов httpS и обработке запросов, сделанных с помощью метода CONNECT – Drahcir

+0

http://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_Tunneling – Drahcir

+0

Я вижу. Ответ переписан с нуля. – ataman

Смежные вопросы