1

当我使用 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);
});
4

1 回答 1

3

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

GET google.org HTTP/1.1
Host: localhost

这是您的本地计算机以 400 响应(因为请求确实无效)。这是因为在内部,node 使用url 模块来解析您传递给的字符串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' }

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

尝试使用完全限定的 URL。

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);
});
于 2013-04-29T16:04:57.223 回答