Node创建http、https双通接口

通过反向代理实现http、https双通

var net = require('net');
var http = require('http');
var https = require('https');
var fs = require('fs');

var httpPort = 3345;
var httpsPort = 3346;

var server = http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('hello world!');
}).listen(httpPort);

var options = {
  key: fs.readFileSync('./cakey.pem'),
  cert: fs.readFileSync('./cacert.pem')
};

var sserver = https.createServer(options, function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('secured hello world');
}).listen(httpsPort);

net.createServer(function(socket){
    socket.once('data', function(buf){
        console.log(buf);
        // https数据流的第一位是十六进制“16”,转换成十进制就是22
        var address = buf[0] === 22 ? httpsPort : httpPort;
        //创建一个指向https或http服务器的链接
        var proxy = net.createConnection(address, function() {
            proxy.write(buf);
            //反向代理的过程,tcp接受的数据交给代理链接,代理链接服务器端返回数据交由socket返回给客户端
            socket.pipe(proxy).pipe(socket);
        });
        proxy.on('error', function(err) {
            console.log(err);
        });
    });
    socket.on('error', function(err) {
        console.log(err);
    });
}).listen(3344);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,470评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 178,475评论 25 709
  • 不管是骚扰还是恶作剧,写这些信给浪矢杂货店的人和普通的咨询者在本质上是一样的。他们都是内心破了个洞,重要的东西正从...
    蜗牛吃韭菜阅读 281评论 0 1
  • 旅行!为什么总是与你失之交臂? 刚要谈起这个问题,可能一些一直计划从未迈开腿的人会反驳,你有钱有时间,当然可以选择...
    哈默老师阅读 410评论 2 2
  • 王福华 一,一天10元钱,一年3650元,您如果今天给我3650元,喔,给您7300元的货,您有兴趣吗? ...
    九彩阳光阅读 420评论 0 0

友情链接更多精彩内容