解決Vue前后端跨域問(wèn)題的方式匯總
1 前言
本文主要介紹借助解決Vue前后端跨域問(wèn)題的幾種方式
說(shuō)到ajax請(qǐng)求,就不得不說(shuō)下xhr(XMLHttpRequest)了,它可以說(shuō)是鼻祖,但是實(shí)際開(kāi)發(fā)中,我們不會(huì)直接使用它,而是進(jìn)行二次封裝或者使用成熟的第三方封裝,比如JQuery,axios
本文將會(huì)使用axios進(jìn)行請(qǐng)求
2 axios介紹
既然說(shuō)到封裝了,那就不得不提到axios了,它和JQuery相比,它支持請(qǐng)求攔截器和響應(yīng)攔截器,并且體積很小,大約是JQuery的四分之一體積,一般在vue項(xiàng)目里面,基本都是使用axios請(qǐng)求
下載axios
想要使用axios,必須先下載它,打開(kāi)終端,輸入
npm i axios
這個(gè)庫(kù)非常的小,安裝很快
引入axios
下載完畢之后,就可以引用了
// 引入axios import axios from 'axios'
3 模擬場(chǎng)景
基本工作做完后,就可以開(kāi)發(fā)前后端代碼,模擬跨域場(chǎng)景了
后端接口
后端起一個(gè)服務(wù),端口為9090,有一個(gè)get請(qǐng)求,先訪問(wèn)下,因?yàn)槭莋et請(qǐng)求,可以直接在瀏覽器訪問(wèn),所以說(shuō)接口是沒(méi)問(wèn)題的
前端請(qǐng)求
有了后端的接口,我們就可以在前端去請(qǐng)求了,上述已經(jīng)安裝好了axios,所以直接編寫(xiě)代碼請(qǐng)求后端接口,通過(guò)控制臺(tái)可以看到,前端的端口是8080
<template> <div> <button @click="getInfo">獲取信息</button> </div> </template> <script> // 引入axios import axios from 'axios' export default { name:'App', methods:{ getInfo(){ // 使用axios發(fā)送請(qǐng)求(get) 發(fā)送請(qǐng)求后會(huì)有兩個(gè)回調(diào) axios.get('http://localhost:9090/queryUserInfo').then( // 成功回調(diào) success=>{ console.log('請(qǐng)求成功!') // 請(qǐng)求成功后的數(shù)據(jù) console.log(success.data) }, // 失敗回調(diào) error=>{ console.log('請(qǐng)求失??!') // 請(qǐng)求失敗原因 console.log(error.message) } ) } } } </script>
然后發(fā)送請(qǐng)求,發(fā)現(xiàn)控制臺(tái)報(bào)錯(cuò)了,這是一個(gè)很經(jīng)典的跨域問(wèn)題
4 發(fā)現(xiàn)跨域問(wèn)題
所謂的跨域請(qǐng)求就是指:當(dāng)前發(fā)起請(qǐng)求的域與該請(qǐng)求指向的資源所在的域不一樣。這里的域指的是這樣的一個(gè)概念:我們認(rèn)為若協(xié)議 + 域名 + 端口號(hào)均相同,那么就是同域。
上面的例子就算因?yàn)榍昂蠖送ㄐ诺亩丝诓灰恢略斐傻目缬騿?wèn)題
常用的解決問(wèn)題的手段有以下三種
1 cors
2 JSONP
3 代理
我們一一舉例說(shuō)明
5 解決跨域 cors
這種方式是我工作中處理跨域用到最多也是最簡(jiǎn)單的一種方式,直接通過(guò)注解解決跨域問(wèn)題
cors
解決跨域,一般不用于前端做任何事,而是后端或者服務(wù)器去操作,其實(shí)就是在服務(wù)器里面返回相應(yīng)的時(shí)候加幾個(gè)響應(yīng)頭,某種程度上來(lái)說(shuō),cors解決跨域才是真正意義上的解決跨域,但是在開(kāi)發(fā)中,這個(gè)響應(yīng)頭不是隨便配置的,如果隨意配置,就會(huì)造成一個(gè)問(wèn)題就算任何人都能找服務(wù)器要數(shù)據(jù),存在一些安全風(fēng)險(xiǎn)
注解解決跨域
在后端的controller或某個(gè)具體方法上可以加上@CrossOrigin注解解決跨域
加完注解后,這個(gè)時(shí)候重啟后端服務(wù)器再訪問(wèn),發(fā)現(xiàn)問(wèn)題解決
值得注意的是,@CrossOrigin這個(gè)注解默認(rèn)是解決全部路徑的跨域,有時(shí)候一些參數(shù)需要自己設(shè)置,否則可能會(huì)有安全隱患
全局配置跨域
如果使用注解,那么我們需要在每一個(gè)controller或者方法上都要加上注解才能解決跨域的問(wèn)題
那么有沒(méi)有一種一勞永逸的辦法呢?
當(dāng)然有,我們可以使用全局配置跨域,代碼如下:
注意:一定不要忘了使用@Configuration注解配置到項(xiàng)目中,否則無(wú)效,具體的一些參數(shù)或者路徑,根據(jù)自身需求設(shè)置即可
package com.wyh.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class CorsMapping implements WebMvcConfigurer { @Override /** * 重新跨域支持方法 * CorsRegistry 開(kāi)啟跨域注冊(cè) */ public void addCorsMappings(CorsRegistry registry) { //addMapping 添加可跨域的請(qǐng)求地址 registry.addMapping("/**") //設(shè)置跨域 域名權(quán)限 規(guī)定由某一個(gè)指定的域名+端口能訪問(wèn)跨域項(xiàng)目 .allowedOrigins("*") //是否開(kāi)啟cookie跨域 .allowCredentials(false) //規(guī)定能夠跨域訪問(wèn)的方法類(lèi)型 .allowedMethods("GET","POST","DELETE","PUT","OPTIONS") //添加驗(yàn)證頭信息 token //.allowedHeaders() //預(yù)檢請(qǐng)求存活時(shí)間 在此期間不再次發(fā)送預(yù)檢請(qǐng)求 .maxAge(3600); } }
以上就是通過(guò)cors解決跨域的兩種方式
JSONP
除了使用cors解決跨域,還可以使用JSONP,它解決跨域的方式其實(shí)挺巧妙的,它借助了script標(biāo)簽li的src屬性,在引入外部資源的時(shí)候不受同源策略限制的特點(diǎn)辦到的,雖然JSONP比較巧妙,但是真正開(kāi)發(fā)中用到的微乎其微,因?yàn)橄胍獙?shí)現(xiàn)JSONP解決跨域,不僅僅要前端人員要用到特殊寫(xiě)法,后端人員也得配置前端才能實(shí)現(xiàn),并且只能解決get請(qǐng)求跨域問(wèn)題,相對(duì)來(lái)說(shuō)很雞肋
這里就得吐槽一句了,雖然開(kāi)發(fā)用的少,但是面試就喜歡問(wèn)你JSONP,就看你知道不知道這個(gè)巧
代理
由于篇幅問(wèn)題,我另外寫(xiě)了一篇文章,大家可以參考:Vue項(xiàng)目打包部署到iis服務(wù)器的配置方法
到此這篇關(guān)于解決Vue前后端跨域問(wèn)題的多種方式的文章就介紹到這了,更多相關(guān)vue前后端跨域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue解決跨域問(wèn)題的幾種常用方法(CORS)
- vue請(qǐng)求后端數(shù)據(jù)和跨域問(wèn)題解決
- vue項(xiàng)目配置代理如何解決跨域問(wèn)題
- vue跨域問(wèn)題:Access?to?XMLHttpRequest?at‘httplocalhost解決
- vue使用反向代理解決跨域問(wèn)題方案
- vue3解決跨域問(wèn)題詳細(xì)代碼親測(cè)有效
- Vue項(xiàng)目中該如何解決跨域問(wèn)題
- vuecli3打包后出現(xiàn)跨域問(wèn)題,前端配置攔截器無(wú)效的解決
- Vue3設(shè)置Proxy代理解決跨域問(wèn)題
- VUE跨域問(wèn)題Access to XMLHttpRequest at
- 前端vue打包項(xiàng)目,如何解決跨域問(wèn)題
- Vue解決跨域問(wèn)題常見(jiàn)方法詳解
相關(guān)文章
SpringBoot+Vue3實(shí)現(xiàn)文件的上傳和下載功能
上傳文件和下載文件是我們平時(shí)經(jīng)常用到的功能,接下來(lái)就讓我們用SpringBoot,Vue3和ElementPlus組件實(shí)現(xiàn)文件的上傳和下載功能吧,感興趣的朋友跟隨小編一起看看吧2023-01-01vue3項(xiàng)目啟動(dòng)自動(dòng)打開(kāi)瀏覽器以及server配置過(guò)程
這篇文章主要介紹了vue3項(xiàng)目啟動(dòng)自動(dòng)打開(kāi)瀏覽器以及server配置過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03vue3項(xiàng)目目錄結(jié)構(gòu)示例詳解
更好的了解項(xiàng)目的目錄結(jié)構(gòu),能更好的去開(kāi)發(fā)項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于vue3項(xiàng)目目錄結(jié)構(gòu)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02Vue項(xiàng)目webpack打包部署到Tomcat刷新報(bào)404錯(cuò)誤問(wèn)題的解決方案
今天很郁悶,遇到這樣一個(gè)奇葩問(wèn)題,使用webpack打包vue后,將打包好的文件,發(fā)布到Tomcat上,訪問(wèn)成功,但是刷新后頁(yè)面報(bào)404錯(cuò)誤,折騰半天才解決好,下面小編把Vue項(xiàng)目webpack打包部署到Tomcat刷新報(bào)404錯(cuò)誤問(wèn)題的解決方案分享給大家,需要的朋友一起看看吧2018-05-05Vue中在data里面調(diào)用method方法的實(shí)現(xiàn)
這篇文章主要介紹了Vue中在data里面調(diào)用method方法的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06