表示 req.protocol 总是 returns https

Express req.protocol always returns https

我有一个服务器 运行 快递。它使用 req.protocol 强制 https。但是,当我在http上访问该站点时,它仍然给出https。

函数如下:

 app.use((req, res, next)=>{
        console.log(req.protocol);
        if(req.protocol === "https"){
            next();
        }else{
            res.redirect(`https://${req.headers.host}${req.url}`);
        }
    });

它没有重定向,因此网站无法正常工作。我该怎么做才能解决这个问题?

听起来您的服务器只响应 HTTPS 请求,而不响应 HTTP 请求。请记住,您在不同的端口(默认情况下为 80 和 443)上提供 HTTP 和 HTTPS。根据您的描述,听起来您只提供 HTTPS。这是来自 Express listen docs 的示例,说明它们如何为两者提供服务:

var express = require('express')
var https = require('https')
var http = require('http')
var app = express()

http.createServer(app).listen(80)
https.createServer(options, app).listen(443)

请注意,他们调用了 listen 两次,一次是在两台不同的服务器上,一台用于 HTTP,另一台用于 HTTPS。