日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

2.三种前端跨域的解决方法

發(fā)布時(shí)間:2023/12/10 HTML 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.三种前端跨域的解决方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.什么是跨域?

跨域不是問題,是一種安全機(jī)制。

廣域的跨域:指一個(gè)域下的文檔或腳本試圖去請(qǐng)求另一個(gè)域下的資源。

?資源跳轉(zhuǎn): A鏈接、重定向、表單提交資源嵌入: <link>、<script>、<img>、<frame>等dom標(biāo)簽,還有樣式中background:url()、@font-face()等文件外鏈腳本請(qǐng)求: js發(fā)起的ajax請(qǐng)求、dom和js對(duì)象的跨域操作等

狹義的跨域:由瀏覽器同源策略限制的一類請(qǐng)求場(chǎng)景。

同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSFR等攻擊。所謂同源是指"協(xié)議+域名+端口"三者相同,即便兩個(gè)不同的域名指向同一個(gè)ip地址,也非同源。

同源策略限制以下幾種行為:

Cookie、LocalStorage 和 IndexDB 無法讀取DOM 和 Js對(duì)象無法獲得AJAX 請(qǐng)求不能發(fā)送

常見域名場(chǎng)景

URL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?說明 ? ? ? ? ? ? ? ? ? ?是否允許通信http://www.example.com/a.jshttp://www.example.com/b.js ? ? ? ? 同一域名,不同文件或路徑 ? ? ? ? ? 允許http://www.example.com/lab/c.js?http://www.example.com:8080/a.jshttp://www.example.com/b.js ? ? ? ? 同一域名,不同端口 ? ? ? ? ? ? ? 不允許http://www.example.com/a.jshttps://www.example.com/b.js ? ? ? 同一域名,不同協(xié)議 ? ? ? ? ? ? ? 不允許http://www.example.com/a.jshttp://192.168.1.1/b.js ? ? ? ? ? 域名和域名對(duì)應(yīng)相同ip ? ? ? ? ? ? 不允許http://www.example.com/a.jshttp://x.example.com/b.js ? ? ? ? ? 主域相同,子域不同 ? ? ? ? ? ? ? 不允許http://example.com/c.jshttp://www.example1.com/a.jshttp://www.example2.com/b.js ? ? ? 不同域名 ? ? ? ? ? ? ? ? ? ? ? ? 不允許

2.跨域?qū)е碌膯栴}

跨域并不會(huì)阻止請(qǐng)求的發(fā)出,也不會(huì)阻止請(qǐng)求的接受,跨域是瀏覽器為了保護(hù)當(dāng)前頁面,你的請(qǐng)求得到了響應(yīng),瀏覽器不會(huì)把響應(yīng)的數(shù)據(jù)交給頁面上的回調(diào),取而代之的是去提示你這是一個(gè)跨域數(shù)據(jù)。提示就是一個(gè)報(bào)錯(cuò)提示。

?報(bào)錯(cuò)提示:從某某位置請(qǐng)求的資源被阻擋了,因?yàn)闆]有在響應(yīng)頭里發(fā)現(xiàn):"Access-Control-Allow-Origin"的響應(yīng)頭。

3.三種前端跨域方法

i.跨域資源共享(CORS)(服務(wù)端設(shè)置,前端直接調(diào)用,后臺(tái)允許前端某個(gè)站點(diǎn)進(jìn)行訪問)

普通跨域請(qǐng)求:只服務(wù)端設(shè)置Access-Control-Allow-Origin即可,前端無需設(shè)置;若要帶cookie請(qǐng)求:前后端都需要設(shè)置。

通過Access-Control-Allow-Origin響應(yīng)頭,就告訴了瀏覽器。如果請(qǐng)求我的資源的頁面是我這個(gè)響應(yīng)頭里記錄了的"源",則不要攔截此響應(yīng),允許數(shù)據(jù)通行。

目前,所有瀏覽器都支持該功能(IE8+:IE8/9需要使用XDomainRequest對(duì)象來支持CORS)),CORS也已經(jīng)成為主流的跨域解決方案。

?安裝axios插件npm i axios --save-dev?引用axios插件import axios from "axios"?響應(yīng)代碼let url="跨域接口url"axios.get(url).then(()=>{})}

ii.JSONP跨域(前端適配,后端配合,前后臺(tái)同時(shí)改造)

為了減輕服務(wù)器的負(fù)載,我們把js、css,img等靜態(tài)資源分離到另一臺(tái)獨(dú)立域名的服務(wù)器上,在html頁面中再通過相應(yīng)的標(biāo)簽從不同域名下加載靜態(tài)資源,而被瀏覽器允許,基于此原理,我們可以通過動(dòng)態(tài)創(chuàng)建script,再請(qǐng)求一個(gè)帶參網(wǎng)址實(shí)現(xiàn)跨域通信。

安裝jsonp插件npm i jsonp --save-dev?引用jsonp插件import jsonp from "jsonp"?響應(yīng)代碼let url="跨域接口url"jsonp(url),(err,res)=>{let result=res;this.data=result;}

通過JSONP則不需要Access-Control-Allow-Origin字段;因?yàn)镴SONP訪問不是一個(gè)請(qǐng)求,而是JS腳本。

JSONP缺點(diǎn):只能實(shí)現(xiàn)get一種請(qǐng)求。

iii.代理跨域(訪問a接口,代理到b接口;通過修改nginx服務(wù)器配置來實(shí)現(xiàn)前端修改,后臺(tái)不動(dòng))

類型:1.nginx代理跨域;2.Nodejs中間件代理跨域

創(chuàng)建vue.config.js(webpack的配置表)?//遵循node.js規(guī)范,使用module.exports={}module.exports = {devServer: {host: "localhost",//主機(jī)port: 8080,//端口//代理proxy: {//訪問a接口,代理到b接口,真正訪問b接口"/api": { //a接口target: "http://mall-pre.springboot.cn",//b接口changeOrigin: true, // changeOrigin為是否需要將主機(jī)原點(diǎn)改為目標(biāo)url地址//設(shè)置空的虛擬接口,統(tǒng)一接口,方便攔截pathRewrite: { //轉(zhuǎn)發(fā)地址api: "",},},},},};

更改vue.config.vue的配置信息時(shí),需要重啟項(xiàng)目(npm run serve)

總結(jié)

以上是生活随笔為你收集整理的2.三种前端跨域的解决方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。