在node.js中接收非HTTP请求

时间:2014-08-22 00:00:29

标签: javascript node.js http rtsp

我需要在Node JS中接收几乎与HTTP请求相同的请求,但在标题中对HTTP有不同的单词,例如请求的第一行是:

POST / RTSP/1.0

(而不是POST / HTTP/1.0

请求格式的其余部分在各方面都与HTTP相同。

有没有办法让http服务器解析器忽略协议在请求的第一行被称为HTTP?所以我可以使用http.createServer等来接收和响应这些“非HTTP”请求吗?

(我知道我可以使用net模块而不是http模块,但是我必须自己实现头解析等。)

1 个答案:

答案 0 :(得分:4)

最简单的方法是在节点中实现tcp服务器,作为替代初始POST的代理:

(注意:我还没有测试过这段代码,但它应该足以说明这个想法)

var net = require('net');

net.createServer(function(s)
{
    var sawRequest = false;
    var buff = "";
    var requestText = "";
    var connected = false;
    var cli = net.createConnection(yourHttpServerPort);
    s.on('data', function(d) {
        if (!sawRequest) {
           requestText += d.toString();
           if (requestText.match(/POST \/ RTSP\/1.0/)) {
              requestText.replace('POST / RTSP/1.0', 'POST / HTTP/1.0');
              buff = requestText;
              sawRequest = true;
           } 
        } else {
           buff += d.toString();
        }
        if (connected)
        {
           if (buff != '')
             cli.write(buff);
           cli.write(d);
        } else {
           buff += d.toString();
        }
    });
    cli.once('connect', function() {
        connected = true;
        cli.write(buff);
    });
    cli.pipe(s);

}).listen(publicFacingRTSPport);

你可以用HAProxy做同样的事情