Node.js HTTP GET请求内容类型

时间:2014-03-28 09:31:28

标签: node.js http rest get

我正在尝试从node.js执行GET请求。此请求是REST服务器,它将访问Hbase并返回数据。 GET请求包含所有必需的Hbase信息(表,密钥,列族等)。以下是代码。

var http = require('http');
var url = {
  host: '127.0.0.1',
  port: 8000,
  path: '/table-name/key/column-family',
  headers: {
    'Content-Type': 'application/octet-stream'
  },
};
http.get(url, function(resp){
  console.log("Status: " + resp.statusCode);
  console.log("Header: " + JSON.stringify(resp.headers));
  resp.setEncoding('utf8');
  var completeResponse = '';
  resp.on('data', function (chunk) {
    completeResponse += chunk;
  });
  resp.on('end', function(chunk) {
    console.log(completeResponse);
  });
});

我的问题是我得到的响应并不总是请求的八位字节流。大多数情况下,数据的格式是有效的,标题如下所示。

{"content-length":"454","x-timestamp":"1395469504346","content-type":"application/octet-stream"}

但是,据说响应中有10次是带有标题的XML字符串,如下所示。

{"content-type":"text/xml","content-length":"793"}

两种情况下的状态代码都是200,我总是要求提供现有密钥。此行为看似随机,并非由任何特定密钥引起。

如何确保响应始终是八位字节流而不是XML / JSON?

1 个答案:

答案 0 :(得分:0)

如注释中所述,您需要设置Accept标头以指定期望(接受)服务器响应的内容类型。请注意,您可能接受多种类型的回复。

Content-Type标头指定邮件正文中内容的类型。如果是POST / PATCH请求,则可以由您的客户端设置,也可以由服务器在其响应中设置。在接收方,它用于了解如何处理身体内容。

有关更多详细信息,请参阅全面的MDN content negotiation documentation