无限redirect服务器端http请求

我使用node.js,但我有一种感觉,这不一定与节点有关 – 无论如何

我正在编写一个url缩短在节点,我想击中缩短的url,以获得页面标题 – 这在大多数情况下,通常遵循redirect,等等适当,等等。

但是,当我点击gmail.com,它进入一个无限的redirect循环 – http://gmail.comredirect到https://www.google.com/accounds/ServiceLogin?service=mail&passive=true&rm=false&continue= …而这又转向自己永远。

我的代码基本上是这样的

var http = require('http'), https = require('https'), URL = require('url'), querystring = require('url'); var http_client = {}; function _makeRequest(url, callback) { var urlInfo = URL.parse(url); var reqUrl = urlInfo.pathname || '/'; reqUrl += urlInfo.search || ''; reqUrl += urlInfo.hash || ''; var opts = { host: urlInfo.hostname, port: urlInfo.port || (urlInfo.protocol == 'https' ? 443 : 80), path = reqUrl, method: 'GET' }; var protocol = (urlInfo.protocol == 'https' ? https : http); var req = protocol.request(opts, function(res) { var content = ''; res.setEncoding('utf8'); res.addListener('data', function(chunk) { content += chunk; }); res.addListener('end', function() { _requestReceived(content, res.headers, callback); }); }); req.end(); }; function _requestReceived(content, headers, callback) { var redirect = false; if(headers.location) { newLocation = headers.location redirect = true; } if(redirect) { console.log('redirecting to :'+newLocation); _makeRequest(newLocation, callback) } else { callback(null, content); } }; 

是的!

啊,好吧,明白了!

我的https检查就像

 var protocol = (urlInfo.protocol == 'https' ? https : http); 

但节点添加冒号的协议,所以它应该是

 var protocol = (urlInfo.protocol == 'https:' ? https : http); 

正因为如此,使用http和gmail才会redirect到https永远