2017-02-10 94 views
1

我試圖將每個http請求重定向到https服務器。 This works fine如果https服務器的端口是443.但是,如果我嘗試重定向到不同的端口,它不會發生。這裏是我的代碼:HTTP重定向到另一個端口中的HTTPS

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) 

回答

2

你的host很可能已經包含端口號。

您可以確保如果更改此:

var host = req.headers['host'] 

到:

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

另外添加一些記錄:

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

看到你在做什麼的網址建築看起來像。

您也可以使用url模塊來處理URL而不是手動連接字符串以避免類似的錯誤。請參閱:

在任何情況下添加一些日誌知道你正在構建看起來像URL。同時用捲曲測試它:

curl -v http://localhost:1234 

查看返回的標題。

+0

我曾在一個日誌中沒有注意到。在你回答他們之後,我覺得真的很愚蠢,他們甚至在[api](https://nodejs.org/api/url.html#url_url_strings_and_url_objects)中有很好的代表性。 但是,如果我明確要求'example.com:80'在其他答案(和我使用的)中找到的方法也會失敗。這意味着這隻適用於隱藏的默認端口? –