2

我注意到当我启动我的应用程序时,我可以使用 http:// 或 https:// 来访问它。但是,我想确保我的用户只使用 https……请问有没有办法总是重定向到 https?

4

4 回答 4

2

受 jssloyer 关于该主题的博客文章(他在上面的回答中总结)的启发,我写了自己的文章,名为Redirecting HTTP to HTTPS with Node.js & Express on IBM Bluemix,我提供了一种稍微不同的方法。使用Express,我打开trust proxy然后让Express框架做x-forwarded-proto标题的分析。

我在 GitHub 上也有一个工作且可部署的示例。

于 2014-09-09T14:16:51.413 回答
2

您可以这样做,但这取决于您的编程语言。我将在下面的 Node.JS 中发布一个示例。基本上您需要做的是检查“x-forwarded-proto”标头,如果它是 http,则通过 https 重定向到您的应用程序。

var middleware = module.exports,
    url = require("url");

var HTTP = "http:",
    HTTPS = "https:";

middleware.transportSecurity = function () {

    var applicationURL = "https://myapp.bluemix.net/"
        scheme = url.parse(applicationURL).protocol;

    function securityEnabled () {
        if (scheme !== HTTP && scheme !== HTTPS) {
            throw new Error(
                "The application URL scheme must be 'http' or 'https'."
            );
        }
        return scheme === HTTPS;
    }

    function redirectURL (request) {
        return url.resolve(applicationURL, request.originalUrl);
    }

    return function (request, response, next) {
        if (securityEnabled() && !request.secure) {
            response.redirect(301, redirectURL(request));
        }
        else {
            next();
        }
    };

};

应用程序.js

...
middleware = require("./middleware"),

app.use(middleware.transportSecurity());
...

让我知道您使用的是什么编程语言,我也可以为此发布一个示例。

于 2014-09-09T01:04:27.983 回答
0

我对我的应用程序也有类似的疑问,我使用了以下代码,该代码对 SSL 实现工作正常:

function sslneed(req, res, next) {
if (req.headers && req.headers.$wssc === "80") {
return res.redirect('https://' + req.get('host') + req.url);
}
next();
}
app.use(sslneed);

您需要专门查看 $WSSC 。

于 2014-11-12T03:36:47.370 回答
0

Bluemix 代理服务器终止 SSL,因此所有流量对于您的应用程序来说都类似于 HTTP。但是,代理还添加了一个名为 $WSSC 的特殊 HTTP 标头,其值为 http 或 https。只需检查此标头,如果值设置为 http,则重定向到页面的 https 版本。

我相信 Liberty Profile 实现 request.getScheme() 是为了检查相同的标头而编写的,因此 Ram 的答案可能是在 Liberty 上做的首选方式。

更新:现在也设置了 X-Forwarded-Proto 标头。

有关更多详细信息,请参阅https://developer.ibm.com/answers/questions/8617/how-to-tell-if-my-application-was-requested-using-ssl/?community=bluemix

于 2014-11-13T08:31:11.320 回答