表示 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。
我有一个服务器 运行 快递。它使用 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。