vue ---解決跨域問題

vue --解決跨域問題

一、什么是跨域?

跨域問題一般是因為瀏覽器的同源策略問題。同源是指,協(xié)議+域名+端口 三者相同,既為同源。

同源策略限制以下幾種行為

  1. Cookie、LocalStorage 和 IndexDB 無法讀取
  2. DOM和JS對象無法獲取
  3. AJAX請求無法發(fā)送
二、跨域解決方案。
  1. 使用jsonp實現(xiàn),網(wǎng)頁通過script標(biāo)簽向服務(wù)器請求json數(shù)據(jù),服務(wù)器受到請求后,將數(shù)據(jù)放在一個指定名字的回調(diào)函數(shù)的參數(shù)里面?zhèn)鹘o前端。
<script src="http://www.test.com/getData?callback=getData"></script>
// 向服務(wù)器test.com發(fā)出請求,該請求的查詢字符串有一個callback參數(shù),用來指定回調(diào)函數(shù)的名字

// 處理服務(wù)器返回回調(diào)函數(shù)的數(shù)據(jù)
<script type="text/javascript">
    // 服務(wù)器返回的數(shù)據(jù)會放到回調(diào)函數(shù)里面
    function getData(res){
        // 處理獲得的數(shù)據(jù)
        console.log(res.data)
    }
</script>
  1. 在vue中實現(xiàn)跨域:在vue項目根目錄下找到vue.config.js文件,沒有的話創(chuàng)建一個就可以。
module.exports = {
    devServer: {
        open: true,
        port: '9595',
        proxy: {  //配置跨域
        '/api': {
            target: 'https://xxxxxxxx',  //這里后臺的地址模擬的;應(yīng)該填寫你們真實的后臺接口
            changOrigin: true,  //允許跨域
            pathRewrite: {
            /* 重寫路徑,當(dāng)我們在瀏覽器中看到請求的地址為:http://localhost:8080/api/core/getData/userInfo 時
                實際上訪問的地址是:http://121.121.67.254:8185/core/getData/userInfo,因為重寫了 /api
                */
            '^/api': '' 
            }
        },
        }
    },
}
  1. 在configs.js文件中,添加下面判斷開發(fā)環(huán)境還是生產(chǎn)環(huán)境。更改baseUrl
const noAuthAxios = axios.create()
const authedAxios = axios.create()

const isPro = Object.is(process.env.NODE_ENV,'production')  //判斷是否是生產(chǎn)環(huán)境

// authedAxios.defaults.baseURL = process.env.VUE_APP_BASE_URL
authedAxios.defaults.baseURL = isPro? process.env.VUE_APP_BASE_URL:'/api'  //如果是生產(chǎn)環(huán)境,則使用接口地址,否則使用代理地址
  1. 完美解決

現(xiàn)在看到發(fā)送的請求都是 :http://localhost:9595/api/xxxxx,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容