因此,在此(簡化)代碼位中,當有人點擊我的節點服務器時,我向另一個網站發出GET請求並將HTML頁面標題打印到控制檯。工作正常:如何使用Node.js中的http.request限制響應長度
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 = cheerio.load(str);
var title = dom('title');
console.log("PAGE TITLE: ",title.html());
});
}).end();
res.end("Done.");
}).listen(port, '127.0.0.1');
但是,在實際的應用程序中,用戶可以指定要打的URL。這意味着我的節點服務器可能正在下載20GB電影文件或任何其他。不好。內容長度標題無法用於停止此操作,因爲它不會被所有服務器傳送。那麼問題:
我該如何告訴它在接收到第一個10KB之後停止GET請求?
乾杯!
如何檢查內容類型/ MIME類型? – Amberlamps 2013-03-26 11:46:19
可以這樣做,但是像內容長度,它不是一個可靠的指標 - 我提出請求的服務器仍然可以在技術上發送任何長度的數據。 ......無論如何我都明白!當然,在身體的第一個10K之後肯定有一種「掛斷」的方式。 – BaronVonKaneHoffen 2013-03-26 11:52:23
您可能需要考慮的另一種方法是使用流並將它們傳回給客戶端,以避免緩衝整個響應。 http://docs.nodejitsu.com/articles/advanced/streams/how-to-use-stream-pipe – 2013-03-26 13:15:41