一.重定向问题
1.1为什么要重定向?
因为http不安全,所以应该转换成https地址。
安全超文本传输协议
申请SSL证书并安装它
const https = require('https ')
常量选项= {
cert: fs.readFileSync('........PEM’),
键:fs.readFileSync('........键’)
}
https.createServer(选项,app)。听着(8103)
1.2重定向实现部分
将非https端口更改为https端口
app.get('* ',function (req,res) {
if (req.protocol!== 'https') {
let host = req . headers . host;
console.log(req.headers.host)
const reg = /(?
const result = host.match(reg)[0]
host = host.replace(reg,“8103”)
console . log(` https://$ { host } $ { req . path } `)
res.redirect(302," https://${host}${req.path} `)
//RES . location(` https://$ { host } $ { req . path } `)
}
})
为什么会有http端口和https端口?
比如访问百度
会自动重定向到他的https地址百度https
百度也用两个端口。
将https地址的端口改为80(HTTPS的默认端口是443)是不可访问的(https://www.baidu.com:80)
但是将http地址的端口更改为443是可以访问的(http://www.baidu.com:443)
只是显示是http还是https。
1.3发现的问题
如果静态资源app.use (express.static('。/dist/'))是这样配置的。
发现重定向没有效果。
app.use ('/dist ',express.static('。/dist/'))发现它无法解析文件。
//我的解析文件看起来像这样
app.get('/',(req,res) => {
fs.readFile('。/dist/index.html ',(err,data) => {
如果(错误){
return RES . end(“404未找到”)
}
const htmlStr = data.toString()
res.end(htmlStr)
})
})
不知道是不是因为我部署了vue,一个单页丰富的应用。
1.4解决方案
记得在第一个重定向中添加next()。
解决了浏览器网址不跳转的问题。
但是,仍然存在一个问题:所有路径路径都访问同一个index.html。
解决方法:添加路径判断,然后用fs导入文件。
一个新的问题出现了:显示一个空白页并报告一个错误。
在此插入图片描述。
我发现有些css文件无法解析。
1.5终极解决方案
将其设置为app.set ('views ',path.join (_ _ dirname,')。/'))
然后把上面的代码放到重定向的代码下面!
结果...我发现如果用https网站,它的界面应该也是用https接口...
典当…
1.6新、新、新问题——把接口改成https
因为使用了不同ip的接口,所以报错证书文件是违法的。
net::错误证书公共名称无效
但是,本地部署的npm运行服务器可以访问此接口。
解决办法
const https = require('https ')
//将axios替换为instance,并添加reject authorized:false对应https模块。
const instance = axios.create({
baseURL:“...”,
超时:1000,
httpsAgent:新https。代理({
拒绝未授权:假
})
})
终于可以正常访问问题了。
但是~
在此插入图片描述。
所以还是要买域名申请对应的证书。
下一篇:https 证书宝塔安装