一.重定向問(wèn)題
1.1為什么要重定向?
因?yàn)閔ttp不安全,所以應(yīng)該轉(zhuǎn)換成https地址。
安全超文本傳輸協(xié)議
申請(qǐng)SSL證書(shū)并安裝它
const https = require('https ')
常量選項(xiàng)= {
cert: fs.readFileSync('........PEM’),
鍵:fs.readFileSync('........鍵’)
}
https.createServer(選項(xiàng),app)。聽(tīng)著(8103)
1.2重定向?qū)崿F(xiàn)部分
將非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 } `)
}
})
為什么會(huì)有http端口和https端口?
比如訪(fǎng)問(wèn)百度
會(huì)自動(dòng)重定向到他的https地址百度https
百度也用兩個(gè)端口。
將https地址的端口改為80(HTTPS的默認(rèn)端口是443)是不可訪(fǎng)問(wèn)的(https://www.baidu.com:80)
但是將http地址的端口更改為443是可以訪(fǎng)問(wèn)的(http://www.baidu.com:443)
只是顯示是http還是https。
1.3發(fā)現(xiàn)的問(wèn)題
如果靜態(tài)資源app.use (express.static('。/dist/'))是這樣配置的。
發(fā)現(xiàn)重定向沒(méi)有效果。
app.use ('/dist ',express.static('。/dist/'))發(fā)現(xiàn)它無(wú)法解析文件。
//我的解析文件看起來(lái)像這樣
app.get('/',(req,res) => {
fs.readFile('。/dist/index.html ',(err,data) => {
如果(錯(cuò)誤){
return RES . end(“404未找到”)
}
const htmlStr = data.toString()
res.end(htmlStr)
})
})
不知道是不是因?yàn)槲也渴鹆藇ue,一個(gè)單頁(yè)豐富的應(yīng)用。
1.4解決方案
記得在第一個(gè)重定向中添加next()。
解決了瀏覽器網(wǎng)址不跳轉(zhuǎn)的問(wèn)題。
但是,仍然存在一個(gè)問(wèn)題:所有路徑路徑都訪(fǎng)問(wèn)同一個(gè)index.html。
解決方法:添加路徑判斷,然后用fs導(dǎo)入文件。
一個(gè)新的問(wèn)題出現(xiàn)了:顯示一個(gè)空白頁(yè)并報(bào)告一個(gè)錯(cuò)誤。
在此插入圖片描述。
我發(fā)現(xiàn)有些css文件無(wú)法解析。
1.5終極解決方案
將其設(shè)置為app.set ('views ',path.join (_ _ dirname,')。/'))
然后把上面的代碼放到重定向的代碼下面!
結(jié)果...我發(fā)現(xiàn)如果用https網(wǎng)站,它的界面應(yīng)該也是用https接口...
典當(dāng)…
1.6新、新、新問(wèn)題——把接口改成https
因?yàn)槭褂昧瞬煌琲p的接口,所以報(bào)錯(cuò)證書(shū)文件是違法的。
net::錯(cuò)誤證書(shū)公共名稱(chēng)無(wú)效
但是,本地部署的npm運(yùn)行服務(wù)器可以訪(fǎng)問(wèn)此接口。
解決辦法
const https = require('https ')
//將axios替換為instance,并添加reject authorized:false對(duì)應(yīng)https模塊。
const instance = axios.create({
baseURL:“...”,
超時(shí):1000,
httpsAgent:新https。代理({
拒絕未授權(quán):假
})
})
終于可以正常訪(fǎng)問(wèn)問(wèn)題了。
但是~
在此插入圖片描述。
所以還是要買(mǎi)域名申請(qǐng)對(duì)應(yīng)的證書(shū)。