我需要在Node JS中接收几乎与HTTP请求相同的请求,但在标题中对HTTP有不同的单词,例如请求的第一行是:
POST / RTSP/1.0
(而不是POST / HTTP/1.0
)
请求格式的其余部分在各方面都与HTTP相同。
有没有办法让http服务器解析器忽略协议在请求的第一行被称为HTTP?所以我可以使用http.createServer等来接收和响应这些“非HTTP”请求吗?
(我知道我可以使用net模块而不是http模块,但是我必须自己实现头解析等。)
答案 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做同样的事情