请求.org域时节点http模块错误

时间:2013-04-29 15:50:33

标签: node.js

当我使用http模块获取.org域名时,我得到了400响应。 (尝试使用google.org,这不是服务器错误。)这是正常行为吗?

var http = require('http');
http.get("google.org", function(res) {
  console.log("Got response: " +     res.statusCode);
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

1 个答案:

答案 0 :(得分:3)

您的代码发出以下HTTP请求:

GET google.org HTTP/1.1
Host: localhost

这是您的本地计算机响应400(因为请求确实无效)。发生这种情况是因为internally,节点使用url module来解析您传递给http.get的字符串。 url将字符串 google.org 视为相对路径。

url.parse('google.org');

{ protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: null,
  query: null,
  pathname: 'google.org',
  path: 'google.org',
  href: 'google.org' }

由于您的字符串解析为空主机名,节点defaults使用localhost。

尝试使用完全限定的网址。

var http = require('http');
http.get("http://google.org", function(res) {
  console.log("Got response: " +     res.statusCode);
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});