【问题标题】:HTTP redirect to HTTPS in a different portHTTP 重定向到不同端口中的 HTTPS
【发布时间】:2017-06-29 03:23:32
【问题描述】:

我正在尝试将每个 http 请求重定向到 https 服务器。 This works fine 如果 https 服务器的端口是 443。但是,如果我尝试重定向到其他端口,则不会发生。这是我的代码:

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)

【问题讨论】:

    标签: node.js http redirect https http-redirect


    【解决方案1】:

    您的host 很可能已经包含端口号。

    你可以确定如果你改变这个:

    var host = req.headers['host']
    

    到:

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

    还添加一些日志记录:

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

    查看您正在构建的 URL 是什么样的。

    您还可以希望使用url 模块来处理 URL,而不是手动连接字符串以避免此类错误。见:

    无论如何,添加一些日志以了解您正在构建的 URL 是什么样的。也可以用 curl 测试一下:

    curl -v http://localhost:1234
    

    查看返回的标题。

    【讨论】:

    • 我在日志中有这个但没有注意到。在您回答之后,我感到非常愚蠢,他们甚至在api 中有很好的网址表示!但是,如果我明确要求 example.com:80 在其他答案中找到的方法(以及我使用的方法)也会失败。这意味着这仅因为隐藏的默认端口才有效?
    猜你喜欢
    • 2012-06-19
    • 2015-01-14
    • 2020-09-18
    • 2019-02-02
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多