RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:00-21:00
当您遇到问题
关闭右侧工具栏
https重定向问题
    发布时间:2022-08-25   访问量:16483

一.重定向问题

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。代理({

拒绝未授权:假

})

})

终于可以正常访问问题了。


但是~

在此插入图片描述。

所以还是要买域名申请对应的证书。