vue proxyTable的跨域中pathRewrite配置方式
vue瀏覽器跨域問(wèn)題和vue proxyTable跨域中pathRewrite配置
vue瀏覽器跨域問(wèn)題
當(dāng)瀏覽器報(bào)如下錯(cuò)誤時(shí),則說(shuō)明請(qǐng)求跨域了。
localhost/:1 Failed to load http://www.thenewstep.cn/test/testToken.php: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8080’ is therefore not allowed access. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
為什么會(huì)跨域
因?yàn)闉g覽器同源策略的限制,不是同源的腳本不能操作其他源下面的對(duì)象。
什么是同源策略
同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會(huì)受到影響。
可以說(shuō)Web是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。
簡(jiǎn)單的來(lái)說(shuō):協(xié)議、IP、端口三者都相同,則為同源
解決辦法
跨域的解決辦法有很多,比如script標(biāo)簽 、jsonp、后端設(shè)置cros等等…,但是我這里講的是webpack配置vue 的 proxyTable解決跨域。
pathRewrite
簡(jiǎn)單來(lái)說(shuō),pathRewrite是使用proxy進(jìn)行代理時(shí),對(duì)請(qǐng)求路徑進(jìn)行重定向以匹配到正確的請(qǐng)求地址,
dev: { ? ? // Paths ? ? assetsSubDirectory: 'static', ? ? assetsPublicPath: '/', ? ? proxyTable: { ? ? ? '/api': { ? ? ? ? target: 'http://XX.XX.XX.XX:8083', ? ? ? ? changeOrigin: true, ? ? ? ? pathRewrite: { ? ? ? ? ? '^/api': '/api' ? // 這種接口配置出來(lái) ? ? http://XX.XX.XX.XX:8083/api/login ? ? ? ? ? //'^/api': '/' 這種接口配置出來(lái) ? ? http://XX.XX.XX.XX:8083/login ? ? ? ? } ? ? ? } ? ? } ? },
如何不配置pathRewrite 請(qǐng)求就被轉(zhuǎn)發(fā)到 http://XX.XX.XX.XX:8083 并把相應(yīng)uri帶上。
比如:localhost:8080/api/xxx 會(huì)被轉(zhuǎn)發(fā)到http://XX.XX.XX.XX:8083/api/xxx
配置完成后需要重新編譯一遍 , 調(diào)用接口的時(shí)候
? ? ? ? // 獲取菜單權(quán)限 ? ? ? getPermission(){ ? ? ? ? this.$ajaxget({ ? ? ? ? ? url: '/api/getPermission', ? ? ? ? ? data: {}, ? ? ? ? ? isLayer: true, ? ? ? ? ? successFc: data => { ? ? ? ? ? ? console.log(data.data) ? ? ? ? ? } ? ? ? ? })
2種數(shù)據(jù)請(qǐng)求方式: fecth和axios
1、fetch方式
在需要請(qǐng)求的頁(yè)面,只需要這樣寫(xiě)(/apis+具體請(qǐng)求參數(shù)),如下:
fetch("/apis/test/testToken.php", { ? ? ? method: "POST", ? ? ? headers: { ? ? ? ? "Content-type": "application/json", ? ? ? ? token: "f4c902c9ae5a2a9d8f84868ad064e706" ? ? ? }, ? ? ? body: JSON.stringify(data) ? ? }) ? ? ? .then(res => res.json()) ? ? ? .then(data => { ? ? ? ? console.log(data); ? ? ? });
2、axios方式
main.js代碼
import Vue from 'vue' import App from './App' import axios from 'axios' Vue.config.productionTip = false Vue.prototype.$axios = axios //將axios掛載在Vue實(shí)例原型上 // 設(shè)置axios請(qǐng)求的token axios.defaults.headers.common['token'] = 'f4c902c9ae5a2a9d8f84868ad064e706' //設(shè)置請(qǐng)求頭 axios.defaults.headers.post["Content-type"] = "application/json"
axios請(qǐng)求頁(yè)面代碼
this.$axios.post('/apis/test/testToken.php',data).then(res=>{ ? ? ? ? console.log(res) })
代理配置proxy下pathrewrite失效踩坑
從網(wǎng)上直接找到的代碼復(fù)制過(guò)來(lái)報(bào)錯(cuò),最后找了一下午為什么失效,最后發(fā)現(xiàn)問(wèn)題直接破防了
錯(cuò)誤:
pathRewrite: {? ? " ?^/api ?" ?: "" //若請(qǐng)求的路徑在目標(biāo)url下但不在/api 下,則將其轉(zhuǎn)換成空 ? },
正確:
pathRewrite: {? ? "^/api": "" //若請(qǐng)求的路徑在目標(biāo)url下但不在/api 下,則將其轉(zhuǎn)換成空 ? ?},
原因:
直接復(fù)制過(guò)來(lái)的 " ^/api " : ""里面多了兩個(gè)空格,判斷url的時(shí)候就獲取不到/api,刪除空格就解決問(wèn)題了
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue中rem與postcss-pxtorem的應(yīng)用詳解
這篇文章主要介紹了Vue中rem與postcss-pxtorem的應(yīng)用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Vue iview-admin框架二級(jí)菜單改為三級(jí)菜單的方法
這篇文章主要介紹了Vue iview-admin框架二級(jí)菜單改為三級(jí)菜單的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07ResizeObserver?loop?limit?exceeded報(bào)錯(cuò)原因及解決方案
這篇文章主要給大家介紹了關(guān)于ResizeObserver?loop?limit?exceeded報(bào)錯(cuò)原因及解決的相關(guān)資料,公司項(xiàng)目監(jiān)聽(tīng)系統(tǒng)中發(fā)現(xiàn)一個(gè)高頻錯(cuò)誤ResizeObserver loop limit exceeded,而瀏覽器的console中卻沒(méi)有提示,需要的朋友可以參考下2023-09-09vue從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面并攜帶參數(shù)的解決方法
這篇文章主要介紹了vue從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面并攜帶參數(shù)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08在Vue3項(xiàng)目中使用如何echarts問(wèn)題
這篇文章主要介紹了在Vue3項(xiàng)目中使用如何echarts問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Element UI 自定義正則表達(dá)式驗(yàn)證方法
今天小編就為大家分享一篇Element UI 自定義正則表達(dá)式驗(yàn)證方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09關(guān)于element-ui日期時(shí)間選擇器選不中12小時(shí)以后的時(shí)間詳解
在之前做個(gè)一個(gè)組件頁(yè)面中,引用了element-ui組件的日期選擇器,遇到的一個(gè)小問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于element-ui日期時(shí)間選擇器選不中12小時(shí)以后時(shí)間的相關(guān)資料,需要的朋友可以參考下2022-08-08vue3封裝AES(CryptoJS)前端加密解密通信代碼實(shí)現(xiàn)
防止數(shù)據(jù)被爬取,前后端傳參接收參數(shù)需要加密處理,使用AES加密,這篇文章主要給大家介紹了關(guān)于vue3封裝AES(CryptoJS)前端加密解密通信代碼實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-12-12