2017-02-10 4 views
1

Ich versuche, jede HTTP-Anfrage an einen HTTPS-Server umzuleiten. This works fine Wenn der Port des https-Servers der 443 ist. Wenn ich jedoch versuche, zu einem anderen Port umzuleiten, passiert das nicht. Hier ist mein Code:HTTP-Umleitung zu HTTPS in einem anderen Port

http.createServer(function(req,res){ 
    var host = req.headers['host'], 
     url = req.url; 
     res.writeHead(301, 
      {"Location": "https://" + host + ":"+SERVER.SPORT + url}) 
     res.end() 
}).listen(SERVER.PORT) 

https.createServer(SERVER.HTTPS_OPTIONS,app).listen(SERVER.SPORT) 

Antwort

2

Ihre host enthält höchstwahrscheinlich bereits die Portnummer.

Sie können sicherstellen, wenn Sie dies ändern:

var host = req.headers['host'] 

zu:

var host = req.headers['host'].split(':')[0]; 

Auch einige Protokollierung hinzufügen:

console.log("https://" + host + ":"+SERVER.SPORT + url); 

zu sehen, was die URL, die du bist Gebäude sieht aus wie.

Sie können auch das Modul url verwenden, um mit URLs zu arbeiten, anstatt Strings manuell zu verketten, um Fehler wie diese zu vermeiden. Siehe:

In jedem Fall einige Protokollierung hinzufügen zu wissen, was die URL, die Sie bauen aussehen. Testen Sie es auch mit curl:

, um zu sehen, welche Header zurückgegeben werden.

+0

Ich hatte das in einem Protokoll und nicht bemerkt. Ich fühlte mich wirklich dumm nach deiner Antwort, sie haben sogar eine schöne Darstellung der URL in der [api] (https://nodejs.org/api/url.html#url_url_strings_and_url_objects)! Aber wenn ich explizit nach dem 'example.com: 80' gefragt habe, würde die Methode, die in anderen Antworten gefunden wurde (und die ich verwendete) auch fehlschlagen. Was bedeutet, dass dies nur wegen der versteckten Standard-Ports funktioniert? –

Verwandte Themen