Vue如何解決跨域問(wèn)題詳解
什么是跨域
跨域指瀏覽器不允許當(dāng)前頁(yè)面的所在的源去請(qǐng)求另一個(gè)源的數(shù)據(jù)。源指協(xié)議,端口,域名。只要這個(gè)3個(gè)中有一個(gè)不同就是跨域。 這里列舉一個(gè)經(jīng)典的列子:
#協(xié)議跨域
http://a.baidu.com訪問(wèn)https://a.baidu.com;
#端口跨域
http://a.baidu.com:8080訪問(wèn)http://a.baidu.com:80;
#域名跨域
http://a.baidu.com訪問(wèn)http://b.baidu.com;
通常在不同服務(wù)器訪問(wèn)過(guò)程中可能會(huì)遇到跨域問(wèn)題,也就是口頭上常說(shuō)的策略同源問(wèn)題 CORS
出現(xiàn)跨越一般就是判斷三個(gè)地方,http協(xié)議,請(qǐng)求地址,端口號(hào),三者若有一處不相同,那么就會(huì)出現(xiàn)跨域,解決這個(gè)問(wèn)題就要配置一個(gè)代理服務(wù)器,通過(guò)代理服務(wù)器實(shí)現(xiàn)跨域請(qǐng)求
解決跨域的情況一般就是如下圖:
Vue 中配置跨域的配置在 vue.config.js 文件中添加:
配置一個(gè)的寫(xiě)法
module.exports = { devServer: { proxy: 'http://localhost:5000' // 配置訪問(wèn)的服務(wù)器地址 } }
配置多個(gè)的寫(xiě)法
module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:5000', // 配置訪問(wèn)的服務(wù)器地址 pathRewrite: { '^/api': '' }, // 用于將請(qǐng)求中的 /api 字符串替換為空, 然后訪問(wèn)地址就能正確訪問(wèn),若不添加此行配置,那么訪問(wèn)地址就變成了: http://localhost:5000/api/request_url,這樣的請(qǐng)求就會(huì)出現(xiàn) 404 操作 ws: true, // 是否支持 webstocket, 默認(rèn)是 true changeOrigin: true // 用于控制請(qǐng)求頭中的 host 值, 默認(rèn)是 ture }, '/api2': { target: 'http://localhost:6000', // 配置訪問(wèn)的服務(wù)器地址 pathRewrite: { '^/api2': '' }, // 用于將請(qǐng)求中的 /api2 字符串替換為空, 然后訪問(wèn)地址就能正確訪問(wèn),若不添加此行配置,那么訪問(wèn)地址就變成了: http://localhost:6000/api/request_url,這樣的請(qǐng)求就會(huì)出現(xiàn) 404 操作 ws: true, // 是否支持 webstocket, 默認(rèn)是 true changeOrigin: true // 用于控制請(qǐng)求頭中的 host 值, 默認(rèn)是 ture } } } }
添加完代理服務(wù)器的相關(guān)配置,就需要通過(guò) ajax 請(qǐng)求訪問(wèn)服務(wù)器了,一般 vue 中使用的都是 axios 庫(kù),這里就以 axios 庫(kù)為例子:
安裝 axios
npm i axios
使用 axios
// 引入 axios 庫(kù) import axios from 'axios' export default { name: 'Student', // 組件名稱 // 組件使用的方法 methods: { 注釋內(nèi)容 `:get 請(qǐng)求訪問(wèn) /api 前綴開(kāi)頭的地址,實(shí)際上訪問(wèn)的地址是: http://localhost:5000/request_url` test1() { axios.get('http://localhost:8080/api/request_url').then(res => { console.log(res.data); // 輸出請(qǐng)求響應(yīng)值內(nèi)容 }); }, 注釋內(nèi)容 :`get 請(qǐng)求訪問(wèn) /api2 前端開(kāi)頭的地址,實(shí)際上訪問(wèn)的地址是:http://localhost:6000/request_url` test2() { axios.get('http://localhost:8080/api2/request_url').then(res => { console.log(res.data); // 輸出請(qǐng)求響應(yīng)值內(nèi)容 }) } } }
總結(jié)
到此這篇關(guān)于Vue如何解決跨域問(wèn)題的文章就介紹到這了,更多相關(guān)Vue解決跨域問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解vue項(xiàng)目打包后通過(guò)百度的BAE發(fā)布到網(wǎng)上的流程
這篇文章主要介紹了將vue的項(xiàng)目打包后通過(guò)百度的BAE發(fā)布到網(wǎng)上的流程,主要運(yùn)用的技術(shù)是vue+express+git+百度的應(yīng)用引擎BAE。需要的朋友可以參考下2018-03-03vue 純js監(jiān)聽(tīng)滾動(dòng)條到底部的實(shí)例講解
今天小編就為大家分享一篇vue 純js監(jiān)聽(tīng)滾動(dòng)條到底部的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue父子組件傳值不能實(shí)時(shí)更新的解決方法
Vue是一個(gè)以數(shù)據(jù)驅(qū)動(dòng)、組件化的前端框架,其中組件化是Vue中較為重要的概念之一,組件之間的通信則成為Vue中較為普遍的需求,下面這篇文章主要給大家介紹了關(guān)于vue父子組件傳值不能實(shí)時(shí)更新的解決方法,需要的朋友可以參考下2023-05-05Vue動(dòng)態(tài)路由路徑重復(fù)及刷新丟失頁(yè)面問(wèn)題的解決
這篇文章主要介紹了Vue動(dòng)態(tài)路由路徑重復(fù)及刷新丟失頁(yè)面問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01vue3實(shí)現(xiàn)問(wèn)卷調(diào)查的示例代碼
本文主要介紹了vue3實(shí)現(xiàn)問(wèn)卷調(diào)查的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Vue循環(huán)組件加validate多表單驗(yàn)證的實(shí)例
今天小編就為大家分享一篇Vue循環(huán)組件加validate多表單驗(yàn)證的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09詳解vue beforeEach 死循環(huán)問(wèn)題解決方法
這篇文章主要介紹了vue beforeEach 死循環(huán)問(wèn)題解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02