Articles of http

与浏览器相比,通过Node.js延迟了HTTP请求

在使用Node.js通过HTTP请求查询一些公共API。 因此,我正在使用request模块。 我正在测量我的应用程序中的响应时间,并且看到我的应用程序通过curl或浏览器从API查询中返回比“直接”请求慢2-3倍的结果。 另外,我注意到与启用了HTTPS的服务的连接通常比普通HTTP服务的连接时间要长,但这可能是巧合。 我试图优化我的request选项,但无济于事。 例如,我查询 https://www.linkedin.com/countserv/count/share?url=http%3A%2F%2Fwww.google.com%2F&lang=en_US 我使用request.defaults来设置所有请求的整体默认值: var baseRequest = request.defaults({ pool: {maxSockets: Infinity}, jar: true, json: true, timeout: 5000, gzip: true, headers: { 'Content-Type': 'application/json' } }); 实际的请求是通过 … var start = new Date().getTime(); var options = { url: 'https://www.linkedin.com/countserv/count/share?url=http%3A%2F%2Fwww.google.com%2F&lang=en_US', method: 'GET' }; baseRequest(options, function(error, response, body) { if (error) { console.log(error); } […]

如何在node.js中使用HTTP keep-alive连续发送请求?

我正在使用node.js 0.6.18,下面的代码使node.jsclosures每两个请求之间的TCP连接(在Linux上用stracevalidation)。 如何让node.js为多个HTTP请求(即保持活动状态)重复使用相同的TCP连接? 请注意,networking服务器能够保持活跃,它可以与其他客户端一起工作。 networking服务器返回分块的HTTP响应。 var http = require('http'); var cookie = 'FOO=bar'; function work() { var options = { host: '127.0.0.1', port: 3333, path: '/', method: 'GET', headers: {Cookie: cookie}, }; process.stderr.write('.') var req = http.request(options, function(res) { if (res.statusCode != 200) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); process.exit(1) } res.setEncoding('utf8'); […]

Node.js Http.request在负载testing下变慢。 难道我做错了什么?

这是我的示例代码: var http = require('http'); var options1 = { host: 'www.google.com', port: 80, path: '/', method: 'GET' }; http.createServer(function (req, res) { var start = new Date(); var myCounter = req.query['myCounter'] || 0; var isSent = false; http.request(options1, function(response) { response.setEncoding('utf8'); response.on('data', function (chunk) { var end = new Date(); console.log(myCounter + ' BODY: ' […]

Node.jsstream如何工作?

我有一个关于Node.jsstream的问题 – 特别是他们如何在概念上工作。 不乏关于如何使用stream的文档。 但是我很难在数据层面find数据stream的工作原理。 我对Web通信(HTTP)的理解有限,就是数据的完整“包”被反复发送。 与订购公司目录的个人相似,客户端向服务器发送GET(目录)请求,服务器响应该目录。 浏览器没有收到目录的页面,而是整本书。 节点stream可能是多部分消息? 我喜欢REST模式 – 特别是它是无状态的。 浏览器和服务器之间的每一次交互都是完全独立和充分的。 节点stream是不是RESTful? 一位开发人员提到了与套接字pipe道的相似性,这使得连接保持开放。 回到我的目录订购的例子,这是否会像电视广告的“等等,还有更多! 而不是完整的目录? 大部分数据stream是接收方“下游”发送消息的能力,如上游的“暂停”和“继续”。 这些消息由什么组成? 他们是POST吗? 最后,我对Node工作方式的有限理解包括这个事件循环。 函数可以放置在线程池的不同线程中,并且事件循环继续。 但是,不应该发送数据stream保持事件循环占用(即停止),直到stream完成? 请问如何继续监视来自下游的“暂停”请求?事件循环是否将该stream放置在池中的另一个线程上,当遇到“暂停”请求时,检索相关线程并暂停它? 我已经阅读了node.js文档,完成了nodechool教程,构build了一个heroku应用程序,购买了两本书(真实的,自包含的,书籍,有点像以前说过的目录,可能不像节点stream),问几个“节点”教练在代码bootcamps – 都讲述如何使用stream,但没有人谈论下面实际发生的事情。 也许你遇到了一个很好的资源解释这些工作? 也许对于一个非CS的头脑来说,一个好的拟人化的比喻?

我应该在node.js上监听哪些端口? 如何和为什么?

我的node.js应用程序,我听港口80 HTTP和443的HTTPS,我相信是相当标准的做法。 然而,我最近阅读的一些例子使用其他端口(例如8080和8081)来监听http / https,然后使用其他方法(例如iptables或ufw规则)通过将数据包路由到其他端口来为端口ufw服务。 在这里和这里看到两个例子。 所以我的问题是为什么我不想直接听港口80和443? 手头有安全问题吗? 这仅仅是这些作者没有权限在低于1024的端口上进行侦听的情况吗(我觉得这很令人惊讶?)? 大多数人是否在边节点上运行Apache? (我不)。 假设有一个很好的理由,为什么我不想直接听80和/或443, 我应该用什么方法将stream量从80/433转发到我select的其他端口? 我已经提到了上面的iptables和ufw,其中一个比其他的更好,还是有其他方法可以使用? 答案取决于我是否在stream程之间平衡了我的负载? 提前致谢。

在Node.Js Express中,“res.render”是否结束http请求?

所以,只有在确定一切已经完成的时候才做“res.render”,对吗? 因为它结束了请求并且射出一个网页。

Express Router CRUD API。 不能删除

那么,我正在阅读MEAN机器书,并遵循它的例子。 我想弄清楚我的代码有什么问题,所以不会发出任何DELETE请求。 GET,PUT和POST的作品应该如此。 我有我的server.js这个代码: app.all('*', function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); res.header('Access-Control-Allow-Headers', 'X-Requested-With, content-type, Authorization'); next(); }); var apiRouter = express.Router(); apiRouter.route('/users/:user_id') .get( function (req, res) { User.findById( req.params.user_id, function (err, user) { if (err) res.send (err); res.json(user); }); }) .put( function (req, res) { User.findById(req.params.user_id, function (err, user) […]

node.js – 可能的http服务器内存泄漏

Nodejs版本:0.8.8 这是服务器: var http = require('http'); var port = 1338; var ip = "127.0.0.1"; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hi there\n'); }).listen(port, ip); 客户端(PHP脚本)卷发到上述服务器的发布请求。 POST是一个string(json),大小约4兆字节。 正如你所看到的,服务器对发布的数据没有任何作用。 为了debugging,我删除了我所有的代码,然后回到hello世界的例子,什么都不做:) 当我看看节点进程的内存使用情况(在活动监视器,Mac应用程序中完成)时,它会报告节点服务器的内存使用量对于每个请求都是较大的。 所以20个请求后,内存使用量翻了一番。

如何在特定的目录上连接/表示使用不到期的caching

我正在开发一个使用connect / express和node.js的应用程序。 它使用这样的“静态”中间件: var express = require("express"); var io = require("socket.io"); var app = express.createServer( express.static(__dirname + '/static') ); app.listen(process.env.PORT || 8080); var listener = io.listen(app); var lobby = listener.of("/lobby"); lobby.on("connection", function (socket) { // etc etc etc }); 在./static ,有一个文件夹,./ ./static/mp3 ,包含了应用程序使用的88个audio文件。 尽pipe返回的访问者已经caching了这些文件,但是我仍然坚信,他们仍然会发送88个http请求来询问他们的caching副本是否过期。 我如何才能执行Expires或max-agecaching,只有这个文件夹?

节点HTTP服务器不工作在Ubuntu Linux上

我想在我的项目目录中运行一个简单的http服务器。 所有我需要的是GET请求支持,所以我可以GET HTML / CSS / JS /等。 为此,我想从npm使用http-server。 我使用npm install http-server -g安装它 现在我cd到我的项目文件夹,它有index.html文件,我打开terminal并运行http-server 但是当我打开我的浏览器在http://localhost:8080/index.html – 它不能连接到主机。 我错过了什么吗?