我最近在我的網站中添加了SSL證書。添加HTTPS支持後,我想將人員重定向到安全連接。我用google搜索瞭解如何檢測HTTPS,並在Stack上找到許多不同的方法。它接縫他們爲別人工作,但他們不爲我工作。在4種檢查安全連接的方式中,只有一種可以工作。檢測ExpressJS下的HTTPS僅適用於4種方法中的1種
什麼不爲我工作:
- req.secure:總是返回假即使我手動把https://開頭
- req.connection.encrypted:總是返回undefined即使我手動輸入https://
- req.protocol:總是返回HTTP即使我把手動https://開頭
什麼工作:
req.headers [ 'X轉發,原']是實際返回現實的唯一途徑。
認識到這一點我重定向到以下列方式建立安全連接:
// Check if the connection is secure, if not, reddiret to a secure one.
function requireHTTPS(req, res, next) {
if(process.env.NODE_ENV == 'production') {
if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect('https://' + req.get('host') + req.url);
}
}
next();
}
app.use(requireHTTPS);
在我,因爲即使重定向到HTTPS後,上面提到我會得到一個重定向循環任何其他方式,上述方法將返回false或http。
我的問題是:爲什麼其他方法不起作用?
技術規格:
- 網站:https://simpe.li
- 託管在Heroku
- 節點版本:4.1.1
- 快遞:4.13.0
史詩!感謝您提供簡短而明確的答案。 –