解决误用headers['Content-length']引起的http.request 挂起的问题(Nodejs)

解决误用headers[‘Content-length’]引起的http.request 挂起的问题(Nodejs)

问题描述: 在用http.request的GET方法进行请求的时候,出现程序挂起现象。

查了一下,发现是因为在通用方法里定义了headers的Content-Length属性。具体调用的时候如果用POST方法,没有问题,如果用GET方法,就会造成程序挂起。

解决方法: 在进行GET请求之前把headers[‘Content-Length’]删除了就可以了。

示例代码:

   delete headers['Content-length'];
var req = http.request(options, function(res) {
 ...
});</code></pre>

2 回复

解决误用 headers['Content-length'] 引起的 http.request 挂起的问题(Node.js)

问题描述:

在使用 http.request 的 GET 方法进行请求时,程序会出现挂起现象。

通过排查发现,问题出在通用方法中定义了 headersContent-Length 属性。具体来说,当使用 POST 方法时,这种情况不会引起问题,但当使用 GET 方法时,会导致程序挂起。

解决方法:

在进行 GET 请求之前,需要将 headers['Content-Length'] 删除掉。这样可以避免不必要的错误和程序挂起现象。

示例代码:

// 示例代码

// 删除 headers 中的 'Content-Length' 属性
delete headers['Content-Length'];

var options = {
  hostname: 'www.example.com',
  port: 80,
  path: '/path/to/resource',
  method: 'GET',
  headers: headers
};

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  
  res.setEncoding('utf8');
  res.on('data', function(chunk) {
    console.log('BODY: ' + chunk);
  });
  
  res.on('end', function() {
    console.log('No more data in response.');
  });
});

req.on('error', function(e) {
  console.error('Problem with request: ' + e.message);
});

req.end();

解释:

  • 在创建请求前,通过 delete headers['Content-Length']; 删除了 Content-Length 头。
  • 确保在发送 GET 请求时,headers 对象中不包含 Content-Length 属性。
  • 这样可以确保 GET 请求能够正常完成,而不会因为错误的头部信息导致程序挂起。

通过上述步骤,你可以有效地解决由于误用 headers['Content-Length'] 导致的 http.request 挂起问题。


问题描述:

在使用 http.request 发送 GET 请求时,程序出现了挂起的现象。

经过检查,发现是由于在通用方法中定义了 headersContent-Length 属性。当使用 POST 方法时,没有问题;而使用 GET 方法时,会导致程序挂起。

解决方法:

在发起 GET 请求前,删除 headers['Content-Length'] 属性即可解决问题。

示例代码:

// 删除 Content-Length 头
delete headers['Content-Length'];

var req = http.request(options, function(res) {
    // 处理响应数据
    res.on('data', function(chunk) {
        console.log('Received: ' + chunk);
    });

    res.on('end', function() {
        console.log('No more data in response.');
    });
});

req.end();

解释:

  • delete headers['Content-Length'];:这行代码会从请求头中删除 Content-Length 属性。
  • http.request(options, callback);:这里创建了一个 HTTP 请求对象,并传入了配置选项和回调函数。
  • 响应处理:通过监听 dataend 事件来处理响应数据,确保请求完成后能正确退出。

通过以上修改,可以避免因 Content-Length 属性引发的 GET 请求挂起问题。

回到顶部