तो इस (सरलीकृत) कोड में, जब कोई मेरे नोड सर्वर को हिट करता है तो मैं किसी अन्य वेबसाइट पर एक 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');
हालांकि, वास्तविक ऐप में, उपयोगकर्ता हिट करने के लिए एक यूआरएल निर्दिष्ट कर सकते हैं। इसका मतलब है कि मेरा नोड सर्वर 20 जीबी मूवी फाइलों या जो कुछ भी डाउनलोड कर सकता है। अच्छा नही। सामग्री-लंबाई शीर्षलेख को इसे रोकने के लिए कोई उपयोग नहीं है क्योंकि यह सभी सर्वरों द्वारा प्रेषित नहीं होता है। प्रश्न तब:
पहले 10 केबी प्राप्त होने के बाद, जीईटी अनुरोध को रोकने के लिए मैं इसे कैसे कह सकता हूं?
चीयर्स!
सामग्री-प्रकार/माइम-प्रकार की जांच करने के बारे में कैसे? – Amberlamps
मुझे लगता है कि, लेकिन सामग्री-लंबाई की तरह, यह एक विश्वसनीय संकेतक नहीं है - जिस सर्वर पर मैं अनुरोध कर रहा हूं वह तकनीकी रूप से डेटा की किसी भी लंबाई को भेज सकता है। ... जैसा कि मैं इसे समझता हूं! निश्चित रूप से शरीर के पहले 10 के बाद बस "लटकना" का एक तरीका होना चाहिए। – BaronVonKaneHoffen
एक अन्य दृष्टिकोण जिसे आप विचार करना चाहते हैं, धाराओं का उपयोग करना और क्लाइंट को वापस पाइप करना है क्योंकि वे आते हैं ताकि आप पूरी प्रतिक्रिया को बफर न करें। http://docs.nodejitsu.com/articles/advanced/streams/how-to-use-stream-pipe –