如何通過Vue自帶服務(wù)器實現(xiàn)Ajax請求跨域(vue-cli)
更新時間:2023年10月27日 12:06:04 作者:南瓜骨頭
從A頁面訪問到B頁面,并且要獲取到B頁面上的數(shù)據(jù),而兩個頁面所在的端口、協(xié)議和域名中哪怕有一個不對等,那么這種行為就叫跨域,這篇文章給大家介紹如何通過Vue自帶服務(wù)器實現(xiàn)Ajax請求跨域(vue-cli),感興趣的朋友一起看看吧
通過Vue自帶服務(wù)器實現(xiàn)Ajax請求跨域(vue-cli)
跨域
- 原理:從A頁面訪問到B頁面,并且要獲取到B頁面上的數(shù)據(jù),而兩個頁面所在的端口、協(xié)議和域名中哪怕有一個不對等,那么這種行為就叫跨域。
- 注意:類似通過請求進行跨域的,大部分情況下并不是發(fā)不出去,也有可能是被瀏覽器攔截了。
為什么端口、協(xié)議和域名有一個不同就不能跨域?
- 同源策略:同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受 到 XSS、CSRF 等攻擊。同源是指"協(xié)議+域名+端口"三者相同,即便兩個不同的域名指向同一個 ip 地址, 也是非同源的。
實現(xiàn)方案(需要安裝axios)
- 原理:瀏覽器和瀏覽器之間避免不了同源策略,但是通過服務(wù)器和服務(wù)器之間的傳遞是不需要同源策略的。
- 當(dāng)在【頁面】中點擊【發(fā)送請求】,則請求會去連接同在【8080服務(wù)器】
- 再通過【8080服務(wù)器】的請求,連接到【8081服務(wù)器】的程序
- 【8081服務(wù)器】響應(yīng),將數(shù)據(jù)傳回【8080服務(wù)器】
- 【8080服務(wù)器】響應(yīng),將數(shù)據(jù)傳到【頁面】上
安裝axios
- 原理:是一種基于promise實現(xiàn)對ajax技術(shù)的一種封裝,可以滿足于各種前端框架,用于負責(zé)與后端交互,get、post后端接口信息,相當(dāng)前后端的窗口。
- 安裝方法:
- 打開CMD窗口,通過命令跳轉(zhuǎn)到當(dāng)時安裝Vue的文件路徑中
- 在窗口中輸入npm i axios,當(dāng)出現(xiàn)added 6 packages in 2m,就安裝成功了
- 使用方法:XXX.vue文件中,在<script></script>的第一行輸入import axios from 'axios'即可(如果你的axios安裝時弄了一個文件夾存放的話,那么將'axios'=>'./文件名/axios')
啟動Vue內(nèi)置服務(wù)器8080的代理功能,在vue.config.js中進行配置
第一種:簡單開啟
- 原理:優(yōu)先從proxy的路徑上去訪問get('請求路徑')的資源,也就是(拼接)http://localhost:8000/請求路徑,如果沒有找到資源,則再從代理服務(wù)器上訪問資源。
- 缺點:這種配置方法不適合支持配置多個代理。
- 這種單一的從8080端口=>8081端口當(dāng)然可行,但是還有8082、8083、8084…(這么多端口每個配一遍就完了!?。。?/li>
// vue.config.js文件 devServer : { // Vue內(nèi)置服務(wù)器8080端口 proxy : 'http://localhost:8000' } // XXX.vue文件 axios.get('/請求路徑').then( response => { // response.data:響應(yīng)數(shù)據(jù)信息 console.log('響應(yīng)數(shù)據(jù)', response.data); }, error => { // error.message:出現(xiàn)錯誤時,顯示錯誤信息 console.log('錯誤信息', error.message); } )
第二種:高級開啟(常用)
devServer : { proxy : { // 凡事請求路徑以/api開始的,都走這個代理 '/api' : { // 端口路徑 target : 'http://localhost:8000', // 重寫'/api'路徑 pathRewrite : {'^/api':''}, // 默認(rèn)值true:表示支持 websocket ws : true, // 默認(rèn)值true:表示改變起源(讓目標(biāo)服務(wù)器不知道真正的起源) changeOrigin : true }, '/foo' : { target : '<other_url>' } } }
- 注意:
pathRewrite : {'^/api':''}
原本是沒有的,可以自己添加,用來重寫’/api’路徑,- 以上的意思是將’/api’路徑改為空,也就是請求路徑前不用寫’/api’
// XXX.vue文件 axios.get('(如果沒設(shè)置pathRewrite的話,這里是要加上/api的)/請求路徑').then( response => { // response.data:響應(yīng)數(shù)據(jù)信息 console.log('響應(yīng)數(shù)據(jù)', response.data); }, error => { // error.message:出現(xiàn)錯誤時,顯示錯誤信息 console.log('錯誤信息', error.message); } )
到此這篇關(guān)于通過Vue自帶服務(wù)器實現(xiàn)Ajax請求跨域(vue-cli)的文章就介紹到這了,更多相關(guān)vue ajax請求跨域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue頁面不能根據(jù)路徑進行跳轉(zhuǎn)的解決方法
本文主要介紹了vue頁面不能根據(jù)路徑進行跳轉(zhuǎn)的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12vuex頁面刷新數(shù)據(jù)丟失問題的四種解決方式
vuex是大家使用vue時大多數(shù)都會選擇的,但是當(dāng)頁面刷新之后vuex數(shù)據(jù)會丟失,下面這篇文章主要給大家介紹了關(guān)于vuex頁面刷新數(shù)據(jù)丟失問題的四種解決方式,需要的朋友可以參考下2022-02-02在vscode中統(tǒng)一vue編碼風(fēng)格的方法
本篇文章主要介紹了在vscode中統(tǒng)一vue編碼風(fēng)格的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02vue+springmvc導(dǎo)出excel數(shù)據(jù)的實現(xiàn)代碼
這篇文章主要介紹了vue+springmvc導(dǎo)出excel數(shù)據(jù)的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06一步步教你利用webpack如何搭一個vue腳手架(超詳細講解和注釋)
這篇文章主要給大家介紹了軟玉利用webpack如何搭一個vue腳手架的相關(guān)資料,文中有超詳細講解和注釋,對大家學(xué)習(xí)或者使用webpack具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01