Articles of http

Node.js HTTPParser不调用一些callback

我正在使用Node.js v0.8.15中的HTTPParser。 不幸的是,一些callback从来没有被调用。 例如,下面的代码只调用onHeadersComplete 。 无法设法调用onURL , onHeaderField和onHeaderValue 。 var HTTPParser = process.binding('http_parser').HTTPParser, parser = new HTTPParser(HTTPParser.REQUEST), request = new Buffer( 'GET /test HTTP/1.1\r\n' + 'Host: www.example.com\r\n' + 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/17.0 Firefox/17.0\r\n' + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n' + 'Accept-Language: en-US,en;q=0.5\r\n' + 'Accept-Encoding: gzip, deflate\r\n' + '\r\n' ); parser.onURL = function() […]

将http请求redirect到nodejs中的https

我试图redirect我的http页面https,我发现一些讨论已经在那里在stackoverflow 如何强制SSL / https Express.js 。 但是现在http = express.createServer()已经被弃用了。 所以我试图做如下: var http = require("http") , https = require("https"); var app = express(); /* If I use below it gives ECONNREFUSED error */ http.get('*', function(req, res) { var path = req.headers.host; var pos = path.indexOf(':'); res.redirect('https://' + path.substr(0, pos) + ':' + String(app.get('port'))); }); app.get('/', function(req, […]

如何得到http请求file upload的响应中止?

我打算用express来上传一个使用nodejs的文件。 我看到bodyParser完成了这项工作 app.use(express.bodyParser({"limit": '2mb'})); 但是,如果我想限制请求的大小,我发现它不会取消上传。 客户端不断发送数据。 所以我写了这个中间件: app.use(function (err, req, res, next) { if(err.status == 413){ req.destroy(); return res.json({ "status": 413, "message": err },413); }else next(err); }); 它工作,取消上传,但客户端不会(或忽略)回应! 我认为这可能是一个http协议的行为,所以任何帮助表示赞赏。

使用nodeJS的自定义path代理WebSockets和HTTP到单独的NodeJS应用程序?

CONTEXT 我正在尝试在NodeJS中构build一个新的Web应用程序。 这个webapp使用两个主要组件。 1)我在NodeJS中编写的代码 – 也就是我自己的逻辑stream程。 2)第三方开源NodeJS应用程序 – EtherCalc – 同时使用HTTP和Socket.io EtherCalc是一个完全独立的Web应用程序。 这是一个电子表格在浏览器+服务器,旨在作为一个独立的应用程序使用。 重要的是,它有自己的命名空间(就像它有不同的path名称,可以路由到不同的function)。 我的应用程序和EtherCalc各自运行在彼此独立的端口上。 为了简单起见,让域名为localhost 。 挑战我想要解决 我的应用程序将使用EtherCalc的电子表格function,以及我自己的代码的非电子表格相关的逻辑stream程。 用户将有权访问这两个接口。 不过,我想这一切似乎来自一个URL /端口 – 我不希望非程序员指定不同的端口来访问不同的function。 解决这个问题的最简单的方法是在我的应用程序中为EtherCalc创build一个名称空间。 以/ethercalc/自动开始的任何path将被转发到运行EtherCalc的端口(在转发之前, ethercalc/从请求URL中删除)。 任何不以标准服务器逻辑stream程开始的东西。 我使用node-http-proxy来实现这一点,使用下面的代码: proxy.proxyRequest(req,res,{ host:'localhost', port:8000 }); 我遇到了问题 这似乎最初运行良好 – 电子表格界面加载时,我去任何/ethercalc/url。 但是,EtherCalc使用WebSockets或JSON轮询来保持服务器和浏览器在同一页面上。 这似乎没有正常工作。 出于某种原因,实际上需要10秒钟才能完成连接。 如果我在电子表格上工作,然后再加载它,这是特别有问题的 – 在我实际看到事先放入的数据之前,有10秒的窗口。 有这个问题之后,要删除url更改function。 现在我的应用程序只是将请求转发到EtherCalc正在运行的端口。 但是,问题依然存在。 直接连接到EtherCalc所在的端口可以解决问题。 重写代码来使用node-http-proxy的httpProxy.createServer()代码也没有什么区别 – 完全相同的结果… 奇怪的是,当连接到我的应用程序端口(具有代理/转发系统的应用程序端口)之后,在漫长的等待期之后,它的function就很好 – 所有事情都是实时同步的。 有谁知道这是怎么回事? TL; […]

node.js http服务器响应套接字写入事件?

有没有办法控制每个步骤的tcp套接字写入,以了解大型图像数据传输的服务器端进度? 最糟糕的是,如何修改主节点的bin文件夹来添加这个事件? 最后,有人可以向我解释为什么node.js http tcp套接字的最大长度是1460?

Node.js http.client不完整的HTML

我在Node.js中有一个简单的http客户端 http.request({host : "www.google.fr", path : "/"}, function(response) { // http ok(200) var str = ''; response.on('data', function (chunk) { str += chunk; }); response.on('end', function () { // end here but html is incomplete sometimes }); }); 我也检查req.on('error'..) ,和超时。 在99.9%的情况下,一切都会好起来的。 但有时,服务器给我一个不完整的HTML。 该sockets是好的,http响应代码是200.从哪里来的http服务器?

在Node.js中parsingHTTP数据包

我正在使用node.jsnetworking库,它使我能够访问它收到的原始数据。 我碰巧知道在某些情况下,它将是一个HTTP数据包,我想知道parsing它的最好方法是什么。 理想情况下会有某种图书馆? var socket = net.connect(port, listener); socket.on('data', function(data) { // If I know data is an HTTP packet how do I parse it and do something like below? // var packet = lib.parse(data); // console.log(packet.host); });

请求URL模式,用户信息和path名丢失在heroku上的node.js应用程序

我有一个节点的应用程序,并试图使用url用户信息来授权请求​​。 当我在heroku上运行我的应用程序时,我注意到request.url只包含url的path组件。 有谁知道为什么发生这种情况? 如果有方法可以访问url模式,用户信息和主机名? 这是一个简单的例子: httpServer = http.createServer(function(request, response){ console.log("RECEIVED HTTP REQUEST – " + request.url); }); 当我在本地运行,并发布到http://username:password@localhost:5000/path ,完整的URL被logging: 10:42:03 web.1 | RECIEVED HTTP REQUEST – http://username:password@localhost:5000/path 当我在heroku上运行它,并发布http://username:password@appname.herokuapp.com/path ,它只loggingpath组件: 2014-03-25T15:40:49.965899+00:00 app[web.1]: RECEIVED HTTP REQUEST – /path

Node.js将Mp3stream式传输到http而不必保存文件

我正在尝试将stream式audio从youtube链接直接传输到http和node.js. 我的代码看起来像这样,我使用Express 4.0。 var express = require('express'); var router = express.Router(); var ytdl = require('ytdl'); var ffmpeg = require('fluent-ffmpeg'); var fs = require('fs'); router.get('/', function(req, res) { var url = 'https://www.youtube.com/watch?v=GgcHlZsOgQo'; var video = ytdl(url) res.set({ "Content-Type": "audio/mpeg" }) new ffmpeg({source: video}) .toFormat('mp3') .writeToStream(res, function(data, err) { if (err) console.log(err) }) }); module.exports = router; […]

在node.js的HTTP旁边的端口80上提供Flash策略请求

我想从Flash浏览器客户端提供套接字连接,因此我需要添加对策略请求文件协议的支持。 由于防火墙等原因,我无法在默认端口843上运行策略文件请求服务。我唯一的select是在端口80上服务器协议,在我的HTTP服务器旁边。 我的应用程序是在node.js中编写的,下面的代码工作: var httpServer = http.createServer(); net.createServer(function(socket){ httpServer.emit('connection', socket); }).listen(80); 我在端口80上打开一个套接字服务器,现在我只是在httpServer上发出连接事件,到目前为止没有问题。 现在我想检查一下新的套接字是否是一个策略文件请求,它只是通过TCP连接发送纯<policy-file-request />string<policy-file-request /> 。 当我注意到这个string,我知道它不是HTTP,我可以返回crossdomain文件并closures套接字。 所以我现在尝试的是这样的: net.createServer(function(socket){ socket.once('readable', function(){ var chunk = socket.read(1); // chunk[0] === 60 corresponds to the opening bracket '<' if(chunk !== null && chunk[0] === 60) { socket.end(crossdomain); } else { socket.unshift(chunk); httpServer.emit('connection', socket); } }); }).listen(80); 现在我检查第一个字节是否是左括号“<”,然后将跨域文件写入套接字。 否则,我将unshift块移到stream上,并在HTTP服务器上发送套接字作为连接。 […]