Tak więc w tym (uproszczonym) bicie kodu, gdy ktoś trafi na mój serwer węzła, wysyłam żądanie GET do innej strony internetowej i wypisuję tytuł strony HTML do konsoli. Działa dobrze:Jak ograniczyć długość odpowiedzi za pomocą http.request w Node.js
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');
Jednak w samej aplikacji użytkownicy mogą podać adres URL, który ma trafić. Oznacza to, że mój serwer węzłowy może pobierać pliki filmowe o wielkości 20 GB lub cokolwiek innego. Niedobrze. Nagłówek długości treści nie jest przydatny do zatrzymania tego, ponieważ nie jest przesyłany przez wszystkie serwery. Pytanie:
Jak mogę nakazać, aby zatrzymać żądanie GET po, powiedzmy, pierwsze 10 KB są odbierane?
Pozdrawiam!
Co powiesz na sprawdzenie typu zawartości/typu mime? – Amberlamps
Mogę przypuszczać, ale podobnie jak długość treści, to nie jest niezawodny wskaźnik - serwer, do którego wysyłam żądanie, nadal może wysyłać dane o dowolnej długości. ... tak jak ja to rozumiem! Na pewno musi istnieć sposób "zawieszenia się" po pierwszych 10 kilogramach ciała. – BaronVonKaneHoffen
Innym rozwiązaniem, które warto rozważyć, jest użycie strumieni i przesłanie ich do klienta, tak aby nie buforował całej odpowiedzi. http://docs.nodejitsu.com/articles/advanced/streams/how-to-use-stream-pipe –