前後端分離開發給我帶來很多的便利,無論是前端同學還是後端同學對於此種開發方式都是舉雙手贊成的。因為這樣我們後端同學不用被css js這一大堆的前端程式碼折磨了,前端也不用改個樣式要開個後臺服務。雖然如此方便,但對於前端還是有些問題需要解決的。比如跨域問題,今天在專案中本地區域網測試移動端,手機瀏覽器開啟會出現跨域(pc端跨域已通過chrome設定解決了)。
1.瀏覽器設定跨域
在PC端開發,chrome瀏覽器是我們前端必不可少的開發工具,用chrome解決跨域簡單粗暴。
1)右鍵chrome選擇屬性
2)選擇快捷方式
3)在目標後面空格 加上 --disable-web-security --user-data-dir=C:\(--user-data-dir是自定義目錄)
開啟瀏覽器,輕鬆解決跨域問題
2.vue配置檔案設定代理
在用vue-cli3構建的前端專案中有vue.config.js檔案,在其中新增如下程式碼
devServer: { proxy: { '/apis': { //將www.example.com對映為/apis
target: 'https://www.example.com', // 介面域名
secure: false, // 如果是https介面,需要配置這個引數
changeOrigin: true, //是否跨域
pathRewrite: {
'^/apis': '' //需要rewrite的,
}
}
}}複製程式碼
詳情請參考文章
3.後臺設定允許跨域
這種方法是我認為最方便的方法,由伺服器決定是否允許跨域,如果允許,伺服器會在響應頭中設定欄位來告訴瀏覽此次請求合法,則瀏覽器不會將請求包丟棄,從而完成跨域。再次舉個nodejs伺服器的栗子:
//設定跨域訪問
app.all('*',function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
if (req.method == 'OPTIONS') {
res.send(200); /讓options請求快速返回/
}
else {
next();
}
});複製程式碼
4.設定伺服器代理(此處只給出實現方案)
此種方法適用於適應多平臺的大型專案,這種方式實際就是將前端ajax請求的地址通過伺服器訪問。前端程式碼執行在nodejs中層層的伺服器上,nodejd只負責執行前端程式碼和轉發前端請求。例如example.org/index 頁面需要訪問api.test.com/getNews 來獲取最新新聞,我們可以通過在example.org的伺服器上面多增加一個介面 kangbiao.org/api?url=api.weibo.com/getNews ,然後再伺服器內部,該介面所做的事情就是向api.weibo.com/getNews 發起請求即可,然後將結果返回。
這種方式如果是單類平臺不建議使用,維護成本比較高。