бесконечное перенаправление на http-запрос на стороне сервера - PullRequest
2 голосов
/ 04 марта 2011

Я использую node.js, но у меня есть ощущение, что это не обязательно связано только с узлом - в любом случае

Я пишу сокращающий URL-адрес в узле, и я хочу нажать на сокращенный URL-адресчтобы получить заголовок страницы - в большинстве случаев это работает, обычно правильно выполняет перенаправления и т. д.

Но когда я нажимаю на gmail.com, происходит бесконечный цикл перенаправления - http://gmail.com перенаправляет на 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);
  }
};

да!

1 Ответ

0 голосов
/ 07 марта 2011

ааа ладно, понял!

мой чек на https был похож на

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

но узел добавляет двоеточие к протоколу, поэтому должно было быть

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

Из-за этого он продолжал использовать http и gmail перенаправлял бы его на https навсегда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...