Javascript 在node.js中接收非HTTP请求
我需要在Node JS中接收与HTTP请求几乎相同的请求,但在标头中有一个与HTTP不同的词,例如,请求的第一行是:Javascript 在node.js中接收非HTTP请求,javascript,node.js,http,rtsp,Javascript,Node.js,Http,Rtsp,我需要在Node JS中接收与HTTP请求几乎相同的请求,但在标头中有一个与HTTP不同的词,例如,请求的第一行是: POST / RTSP/1.0 (而不是POST/HTTP/1.0) 请求格式的其余部分在各个方面都与HTTP相同 有没有办法让http服务器解析器忽略在请求的第一行中称为http的协议?所以我可以使用http.createServer等来接收和响应这些“非http”请求 (我知道我可以使用网络模块而不是http模块,但是我必须自己实现头解析等。)最简单的方法是在节点中实现tc
POST / RTSP/1.0
(而不是POST/HTTP/1.0
)
请求格式的其余部分在各个方面都与HTTP相同
有没有办法让http服务器解析器忽略在请求的第一行中称为http的协议?所以我可以使用http.createServer等来接收和响应这些“非http”请求
(我知道我可以使用网络模块而不是http模块,但是我必须自己实现头解析等。)最简单的方法是在节点中实现tcp服务器,作为代理来代替初始POST: (注意:我还没有测试过这段代码,但它应该足以说明这个想法)
你也可以用HAProxy做同样的事情。。。那么你的问题到底是什么?@bguiz,基本上,有没有一种方法可以让它忽略它在头中没有说HTTP?(无需仅为一个单词的差异重写http服务器)如果服务器确实是,那么您仍然需要编写自己的。除此之外,如果其余内容没有差异,那么正确的做法是将服务器改为编写HTTP而不是RTSP,而且这也会简单得多。我假设你问这个问题是因为你没有访问服务器的权限?我无法控制客户端代码(iOS和iTunes Airplay),它将这些POST请求作为RTSP而不是HTTP发送。(根据维基百科RTSP没有POST方法,所以是HTTP)对不起,我在上面的评论中混淆了服务器和客户端。不幸的是,这会让你陷入困境。我不知道这个问题的答案-也许这个网站上的其他人可以帮助你!我也会这样做,但是在客户端连接和下游服务器之间使用一个转换流,并在那里执行正则表达式…实际上,我在这里重新使用了比streams2旧的portforward.js脚本:)缺少一个括号:
if(requestText.match(/POST\/RTSP\/1.0/){
应该是if(requestText.match)(/POST\/RTSP\/1.0/){
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);