6

我们如何停止来自服务器的剩余响应 - 例如。

http.get(requestOptions, function(response){

//Log the file size;
console.log('File Size:', response.headers['content-length']);

// Some code to download the remaining part of the response?

}).on('error', onError);

我只想记录文件大小,而不是浪费我的带宽下载剩余的文件。nodejs 会自动处理这个问题还是我必须为它编写一些特殊的代码?

4

2 回答 2

13

如果您只想获取文件的大小,最好使用HTTP HEAD,它只返回来自服务器的响应标头而不返回正文。

您可以像这样在 Node.js 中发出 HEAD 请求:

var http = require("http"),
    // make the request over HTTP HEAD
    // which will only return the headers
    requestOpts = {
    host: "www.google.com",
    port: 80,
    path: "/images/srpr/logo4w.png",
    method: "HEAD"
};

var request = http.request(requestOpts, function (response) {
    console.log("Response headers:", response.headers);
    console.log("File size:", response.headers["content-length"]);
});

request.on("error", function (err) {
    console.log(err);
});

// send the request
request.end();

编辑:

我意识到我并没有真正回答您的问题,本质上是“如何在 Node.js 中尽早终止请求?”。您可以通过调用 response.destroy() 来终止处理过程中的任何请求:

var request = http.get("http://www.google.com/images/srpr/logo4w.png", function (response) {
    console.log("Response headers:", response.headers);

    // terminate request early by calling destroy()
    // this should only fire the data event only once before terminating
    response.destroy();

    response.on("data", function (chunk) {
        console.log("received data chunk:", chunk); 
    });
});

您可以通过注释掉 destroy() 调用并观察在完整请求中返回两个块来测试这一点。然而,就像其他地方提到的那样,简单地使用 HTTP HEAD 更有效。

于 2013-04-24T14:33:40.093 回答
3

您需要执行HEAD请求而不是 get

取自这个答案

var http = require('http');
var options = {
    method: 'HEAD', 
    host: 'stackoverflow.com', 
    port: 80, 
    path: '/'
};
var req = http.request(options, function(res) {
    console.log(JSON.stringify(res.headers));
    var fileSize = res.headers['content-length']
    console.log(fileSize)
  }
);
req.end();
于 2013-04-24T14:33:27.270 回答