Articles of http

Node.js HTTP获取URL长度限制

在Node.js中进行HTTP GET请求时的大小是否有限制? 如果是的话,我该如何改变呢? var url = "…" // very long, ~50'000 chars http.get(url, function (res) { res.pipe(fs.createWriteStream("file.txt")); }); 给我这个: <html><body><h1>400 Bad request</h1> Your browser sent an invalid request. </body></html> 在PowerShell或Bash中使用wget也是一样的。 $url = "…" wget -outf file.txt $url

Nodejs反向代理性能

我正在研究使用Node作为反向代理的可能性。 我的项目的主要目标之一是它是非常高的性能。 所以我已经设置了一个节点服务器来代理请求到目标节点服务器,无论请求会以“hello world”响应。 使用Apache Bench我已经对每秒处理的请求数做了一些比较。 代理,目标和调用者分别位于AWS的单独M1大型实例中。 我的结果令人沮丧和困惑。 直接从调用者到目标: ab -c 100 -n 10000 http://target-instance/ =〜2600个请求/秒 从调用者通过代理到目标 ab -c 100 -n 10000 http://proxy-instance/ =〜1100个请求/秒 使用lighttpd,我能够在代理和目标上获得约3500次/秒的请求 我对代理服务器性能不如目标服务器感到失望。 当比较像lighttpd这样的其他产品时,我已经看到代理实现了与目标相当的结果,所以我很困惑Node(应该快速减轻)何时达不到。 这里是我在Node v0.5.9中的代理代码:我错过了什么吗? var server = http.createServer(function(req, res){ var opts = { host: 'target-instance', port: 80, path: '/', method: 'GET'}; var proxyRequest = http.get(opts, function(response){ response.on('data', function(chunk){ res.write(chunk); }); […]

Node.js的http.request有什么性能? 它可以处理多less个并发请求?

我的node.js服务器使用最新的(0.4.8)http.request调用来调用另一个服务器。 我使用jMeter来运行负载testing。 每秒有50-100个并发线程,循环1000次。 当脚本继续运行时,我观察到一些减速。 我监测的networking吞吐量相当低,CPU和内存也很低。 而在另一台服务器上,日志显示他们的回应很快。 (毫秒)。 但是,我的node.js服务器中的console.log显示http.request响应时间从200-300 ms开始,到2000-3000 ms。 我不确定是否有可以并发http.request的限制。 请指教。 经过巨大的testing,我认为http.request的平均约300-400个请求/秒,ok服务器,maxSockets = 1024。通常,我看到每个请求的速度(连接到不同的网站)大约是80-100毫秒。

CORS – 与Angular和Express的http选项错误

我正在尝试从Angularjs客户端向我的API进行POST,我在另一个域中运行的服务器上有这个configuration: app.use(function(req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, OPTIONS, DETELE'); res.setHeader('Access-Control-Allow-Headers', '*'); next(); }); 发送到服务器的标题是: OPTIONS /api/authenticate HTTP/1.1 Host: xxxx.herokuapp.com Connection: keep-alive Access-Control-Request-Method: POST Origin: http://127.0.0.1:5757 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 Access-Control-Request-Headers: accept, content-type Accept: */* Referer: http://127.0.0.1:5757/login Accept-Encoding: gzip, deflate, sdch Accept-Language: […]

Express.js HTTP请求超时

我想知道是否有人可以告诉我什么时候使用Express的默认HTTP请求超时。 我的意思是:处理一个http请求多less秒后,Express / Node.js服务器closures连接,当浏览器和服务器手动closures连接时? 如何修改单个路由的超时时间? 我想把它设置为15分钟左右的特殊audio转换路线。 非常感谢。 汤姆

在node.js中使用request.body或request.params有没有区别?

我想知道在从客户端发送数据到服务器时是否有任何使用node.js中的request.body或request.params偏好?

HTTP响应头中'Allow'和'Access-Control-Allow-Methods'之间的区别?

我使用ExpressJS for NodeJS编写了一个RESTful API。 我正在使用BackboneJS来调用这个API。 这是我的API通过OPTIONS返回的示例头: Access-Control-Allow-Headers:Content-Type Access-Control-Allow-Origin:http://localhost Allow:GET,PUT,DELETE Connection:keep-alive Content-Length:14 Content-Type:text/html; charset=utf-8 Date:Sun, 19 Aug 2012 13:52:35 GMT X-Powered-By:Express 我已经修改了标题以包含首先出现的两个访问控制允许字段。 其余部分由express自动生成,包括允许字段。 我能够没有问题的GET。 但是,当我尝试使用BackboneJS进行PUT或DELETE时,遇到: Method PUT is not allowed by Access-Control-Allow-Methods. Method DELETE is not allowed by Access-Control-Allow-Methods. 当然,我可以修改我的响应头包括这两个方法来解决这个问题。 但是我希望理解这些与ExpressJS基于绑定到路由的自动添加的基本“允许”之间的区别。 有什么不同?

Nodejs服务器主机名

好的,在Node.js中,让我的服务器获得请求的主机名似乎很简单: app.get('/', function(req,res){ console.log(req.headers.host); }); 有一个简单的方法来确定我的实际HTTP服务器的主机名? 例如,我的服务器运行在地址http://localhost:3000 – 我可以编程方式确定这个地址? 我正在使用expressjs。

如何在Node.js中用http.request限制响应长度

所以在这个(简化的)代码中,当有人点击我的节点服务器时,我向另一个网站发出GET请求,并将HTML页面标题打印到控制台。 工作正常: var http = require("http"); var cheerio = require('cheerio'); var port = 8081; s = http.createServer(function (req, res) { var opts = { method: 'GET', port: 80, hostname: "pwoing.com", path: "/" }; http.request(opts, function(response) { console.log("Content-length: ", response.headers['content-length']); var str = ''; response.on('data', function (chunk) { str += chunk; }); response.on('end', function() { dom […]

Express.JS:我怎样才能通过名字而不是数字设置回复状态?

好的,大家都知道200是没有问题的,404没有find。 但是,对于永久性与临时性redirect,付款需求或其他更具异国情调的HTTP错误代码,我可能会更好地执行如下操作: response.status('REQUEST_ENTITY_TOO_LARGE'); 而不是仅仅使用一个被认为是不好的练习的幻数。 当然,我可以在某些对象中使​​用413:'REQUEST_ENTITY_TOO_LARGE',但Express已经有一个状态码 – >名称映射的副本,我宁愿不重复。 如何在Express JS中按名称指定响应状态? 编辑 :谢谢@Akshat指出http.STATUS_CODES。 详细阐述他的答案,既然价值本身是独一无二的,那么可以运行: var statusCodeByName = {}; for ( var number in http.STATUS_CODES ) { statusCodeByName[http.STATUS_CODES[number]] = number } 这允许人们: > statusCodeByName['Request Entity Too Large'] '413'