今天小編給大家分享一下vue怎么解決跨域問題的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
公司主營業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出望謨免費(fèi)做網(wǎng)站回饋大家。
在瀏覽器中,當(dāng)腳本在一個(gè)Web頁面的文檔樹中執(zhí)行的時(shí)候,被執(zhí)行的腳本可以訪問文檔樹的任何部分。 然而,當(dāng)試圖訪問來自不同源的資源時(shí),跨域問題就出現(xiàn)了。
源是指網(wǎng)絡(luò)中的服務(wù)器或者客戶端,可以是IP地址,域名或端口號(hào)。瀏覽器通過比較源的組成部分來判斷兩個(gè)URL是否相同,以確定它們是否跨域。
舉個(gè)例子,假設(shè)我們有以下URL:
http://www.example.com/page1 https://www.example.com/page2 http://www.example.com:8080/page3
它們每一個(gè)都包含三個(gè)組成部分:協(xié)議、主機(jī)和端口號(hào)。 在這個(gè)例子中,第一個(gè)和第三個(gè)URL的協(xié)議和主機(jī)相同,但是它們的端口號(hào)不同。 由于端口號(hào)的不同,這些URL都被視為不同源。
當(dāng)一個(gè)JavaScript腳本試圖訪問其他源的資源,瀏覽器會(huì)根據(jù)相同源政策,阻止該腳本的執(zhí)行。瀏覽器認(rèn)為這樣做可以防止惡意腳本竊取數(shù)據(jù)。
例如,在Vue.js應(yīng)用程序中某個(gè)組件的JavaScript代碼試圖訪問其他源的API,應(yīng)用程序就會(huì)向?yàn)g覽器發(fā)出一個(gè)跨域請(qǐng)求。如果不解決跨域問題,瀏覽器將阻止應(yīng)用程序從其他源加載所需要的資源。
解決Vue.js應(yīng)用程序的跨域問題,需要考慮多個(gè)方面:后端API跨域、前端打包靜態(tài)資源跨域等,我們分別來看。
在Vue.js應(yīng)用程序中,API需要與前端應(yīng)用程序進(jìn)行交互。如果這些API在不同的域中,則需要進(jìn)行跨域。 您可以通過以下方法來解決這個(gè)問題:
在API服務(wù)器端通過設(shè)置Access-Control-Allow-Origin頭,向?yàn)g覽器指定信任的反向代理服務(wù)器的地址,即可解決跨域問題。
Access-Control-Allow-Origin HTTP頭標(biāo)識(shí)了哪些域名是被服務(wù)器信任的。 如果該標(biāo)頭包含了來自客戶端請(qǐng)求的地址,則API服務(wù)器將允許該請(qǐng)求通過。
Access-Control-Allow-Origin: http://your-domain.com/
要允許所有域名均可訪問API,則可以使用通配符:
Access-Control-Allow-Origin: *
這種解決方法十分簡單,但限制很大,不適用于大多數(shù)應(yīng)用程序。
為了更好地控制哪些請(qǐng)求能夠通過反向代理,您可以使用反向代理服務(wù)器,比如Nginx。 反向代理服務(wù)器用于從遠(yuǎn)程服務(wù)器上(例如API服務(wù)器)獲取數(shù)據(jù)并將其返回給客戶端。
在使用反向代理時(shí),API服務(wù)器將不暴露在互聯(lián)網(wǎng)上。取而代之的是,客戶端將向反向代理發(fā)送請(qǐng)求,并從中獲取數(shù)據(jù)。 反向代理服務(wù)器可控制哪些請(qǐng)求能夠通過請(qǐng)求管道。
例如,對(duì)于Vue.js應(yīng)用程序的某個(gè)API,您可以設(shè)置以下Nginx服務(wù)器配置:
location /api/ { proxy_pass http://your-api-server.com/; add_header 'Access-Control-Allow-Origin' 'http://your-domain.com/'; }
以上設(shè)置指定所有針對(duì)/api/*
路徑的請(qǐng)求將轉(zhuǎn)發(fā)到API服務(wù)器上。當(dāng)從域名為your-domain.com
的用戶發(fā)送的請(qǐng)求時(shí),反向代理服務(wù)器將允許請(qǐng)求通過。只有來自這個(gè)域名的請(qǐng)求才會(huì)被允許。其他域名將被拒絕。
Vue.js應(yīng)用程序在生產(chǎn)環(huán)境中會(huì)被打包為靜態(tài)文件,并且會(huì)在應(yīng)用程序所在的服務(wù)器上進(jìn)行部署。如果你的前端應(yīng)用和API部署在不同的服務(wù)器上,遇到這種情況時(shí),我們需要做如下處理:
打包好的前端靜態(tài)代碼,如果沒有設(shè)置publicPath,它會(huì)通過相對(duì)路徑的形式引用相關(guān)資源。相對(duì)路徑的導(dǎo)入方式會(huì)使用'./'、'../'等表示導(dǎo)入資源的路徑標(biāo)識(shí)符,而這些標(biāo)識(shí)符表示的路徑僅僅是相對(duì)于代碼文件的。
在打包后的靜態(tài)資源中,你會(huì)發(fā)現(xiàn)資源路徑都以相對(duì)路徑的方式被訪問。如果你把打包后的代碼直接拷貝到其他的服務(wù)器上進(jìn)行訪問,你會(huì)發(fā)現(xiàn)訪問會(huì)出現(xiàn)問題。
為了解決這個(gè)問題,需要在打包靜態(tài)文件的時(shí)候添加一個(gè)publicPath,將所有的路徑改變?yōu)榻^對(duì)路徑。
在部署前,打開 vue.config.js
文件,然后增加一個(gè) publicPath 地址。比如:
module.exports = { publicPath: 'http://cdn.example.com/vue-app' }
這個(gè)配置告訴Webpack在生成靜態(tài)資源時(shí)將 publicPath 配置為自定義的地址,這樣在訪問其他域名時(shí)就可以直接通過CDN資源加載代碼,解決了資源請(qǐng)求跨域的問題。
在靜態(tài)資源和API資源都在CDN域名下的時(shí)候需要設(shè)置CORS規(guī)則,而不是使用Nginx反向代理,因?yàn)镹ginx在這種情況下一般還會(huì)有一層CDN加速。
在CDN控制臺(tái)上進(jìn)行跨域CORS規(guī)則的設(shè)置,開啟Access-Control-Allow-Origin頭, 允許前端代碼的訪問靜態(tài)資源,解決資源訪問跨域問題。
以上就是“vue怎么解決跨域問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前文章:vue怎么解決跨域問題
網(wǎng)站地址:http://aaarwkj.com/article26/jejsjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、標(biāo)簽優(yōu)化、小程序開發(fā)、網(wǎng)站維護(hù)、品牌網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)