摘要:同源策略是對(duì)的一個(gè)主要約束,它為通信設(shè)置了相同的域相同的端口相同的協(xié)議這一限制。試圖訪問(wèn)上述限制之外的資源都會(huì)引發(fā)安全錯(cuò)誤,除非采用被認(rèn)可的跨域解決方案。這個(gè)方案叫做跨源資源共享。方案二弊端不支持請(qǐng)求。方案三與方案一類似。
什么是AJAX?
AJAX 是無(wú)需刷新頁(yè)面就能夠從服務(wù)器去的數(shù)據(jù)的一種方法,負(fù)責(zé)Ajax運(yùn)作的核心對(duì)象是XMLHttpRequest(XHR)對(duì)象。
同源策略是對(duì)XHR的一個(gè)主要約束,它為通信設(shè)置了“相同的域、相同的端口、相同的協(xié)議”這一限制。
試圖訪問(wèn)上述限制之外的資源都會(huì)引發(fā)安全錯(cuò)誤,除非采用被認(rèn)可的跨域解決方案。
這個(gè)方案叫做CORS(Cross-Origin Resource Sharing)跨源資源共享。
哪些訪問(wèn)屬于跨域?
http://a.com 不允許訪問(wèn) http://b.com(不同域)
http://a.com 不允許訪問(wèn) https://a.com(同一域名,不同協(xié)議)
http://a.com 不允許訪問(wèn) http://a.com:8080(同一域名,不同端口)
http://a.com 不允許訪問(wèn) http://192.168.1.1(域名和域名對(duì)應(yīng)的ip)
http://a.a.com 不允許訪問(wèn) http://b.a.com(主域相同,子域不同)
三種解決方案:
方案一:
//弊端:存在瀏覽器兼容的問(wèn)題
需要被請(qǐng)求方的服務(wù)端設(shè)置: Access-Control-Allow-Origin
切記:Access-Control-Allow-Origin 不可設(shè)置為 * ,設(shè)置為可訪問(wèn)的域名。
//設(shè)置可供訪問(wèn)的白名單 $white_list = ["http://cdn.abc.com","http://abc.com"]; $_SERVER["HTTP_ORIGIN"] //表示請(qǐng)求方的域名 $http_origin = ""; if (!empty($_SERVER["HTTP_ORIGIN"]) && in_array($_SERVER["HTTP_ORIGIN"],$white_list)) { $http_origin = $_SERVER["HTTP_ORIGIN"]; //設(shè)置 header 信息 header("Access-Control-Allow-Origin: {$http_origin}"); header("Access-Control-Allow-Methods", "POST,GET"); header("Access-Control-Allow-Credentials:true"); //允許訪問(wèn)Cookie header("Access-Control-Allow-Headers : X-Requested-With"); //設(shè)置Headers } //執(zhí)行代碼邏輯...
另:如果請(qǐng)求的是html,在文件里加上meta標(biāo)簽。
方案二:
//弊端:不支持 POST 請(qǐng)求。
使用 JSONP 進(jìn)行解決跨域問(wèn)題,網(wǎng)上文章蠻多的。
方案三:
與方案一類似。
修改Nginx Apache 配置:
//Nginx http { ...... add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; ...... } Apache :...... Header set Access-Control-Allow-Origin *
大家可以根據(jù)自己的情況進(jìn)行選擇方案。
來(lái)源:http://mp.weixin.qq.com/s?__b...
Thanks ~
AD:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30454.html
摘要:在接觸前端開發(fā)起,跨域這個(gè)詞就一直以很高的頻率在我們學(xué)習(xí)工作中重復(fù)出現(xiàn),最近在工作中遇到了跨域的相關(guān)問(wèn)題,這里我把它總結(jié)記錄一下。 在接觸前端開發(fā)起,跨域這個(gè)詞就一直以很高的頻率在我們學(xué)習(xí)工作中重復(fù)出現(xiàn),最近在工作中遇到了跨域的相關(guān)問(wèn)題,這里我把它總結(jié)記錄一下。關(guān)于跨域,有N種類型,現(xiàn)在我只專注于ajax請(qǐng)求跨域(ajax跨域只是屬于瀏覽器同源策略中的一部分,其它的這里不做介紹),內(nèi)容...
摘要:關(guān)于,強(qiáng)烈推薦閱讀跨域資源共享詳解阮一峰另外,這里也整理了一個(gè)實(shí)現(xiàn)原理圖簡(jiǎn)化版如何判斷是否是簡(jiǎn)單請(qǐng)求瀏覽器將請(qǐng)求分成兩類簡(jiǎn)單請(qǐng)求和非簡(jiǎn)單請(qǐng)求。 前言 從剛接觸前端開發(fā)起,跨域這個(gè)詞就一直以很高的頻率在身邊重復(fù)出現(xiàn),一直到現(xiàn)在,已經(jīng)調(diào)試過(guò)N個(gè)跨域相關(guān)的問(wèn)題了,16年時(shí)也整理過(guò)一篇相關(guān)文章,但是感覺還是差了點(diǎn)什么,于是現(xiàn)在重新梳理了一下。 個(gè)人見識(shí)有限,如有差錯(cuò),請(qǐng)多多見諒,歡迎提出iss...
摘要:瀏覽器的同源策略固然保障了互聯(lián)網(wǎng)世界的數(shù)據(jù)隱私與數(shù)據(jù)安全,但是如果當(dāng)我們需要使用跨域請(qǐng)求資源時(shí),同源策略又會(huì)成為開發(fā)者的阻礙。我們之前提到過(guò),如果想要繞過(guò)瀏覽器同源策略,實(shí)現(xiàn)使用技術(shù)跨域獲取資源,需要服務(wù)端和客戶端的協(xié)同合作。 瀏覽器的同源策略固然保障了互聯(lián)網(wǎng)世界的數(shù)據(jù)隱私與數(shù)據(jù)安全,但是如果當(dāng)我們需要使用AJAX跨域請(qǐng)求資源時(shí),同源策略又會(huì)成為開發(fā)者的阻礙。在本文中,我們會(huì)簡(jiǎn)單介紹需...
摘要:所以瀏覽器認(rèn)為這是安全的。如果你細(xì)心的話你會(huì)發(fā)現(xiàn),其實(shí)請(qǐng)求已經(jīng)發(fā)送出去了,你只是拿不到響應(yīng)而已。所以瀏覽器這個(gè)策略的本質(zhì)是,一個(gè)域名的,在未經(jīng)允許的情況下,不得讀取另一個(gè)域名的內(nèi)容。但瀏覽器并不阻止你向另一個(gè)域名發(fā)送請(qǐng)求。 同源策略與CORS跨域 PS:這篇文章是緊接著JSONP原理和Ajax學(xué)習(xí)與理解寫的,有些內(nèi)容是承接了上兩篇文章.這篇文章只算是我的個(gè)人學(xué)習(xí)筆記,內(nèi)容沒(méi)有經(jīng)過(guò)精心排...
摘要:合適和夠用是最完美的追求。比如從頁(yè)面去請(qǐng)求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請(qǐng)求,從而克服了只能同源使用的限制。定義在中的路由都是無(wú)狀態(tài)的,并且會(huì)應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個(gè)人網(wǎng)站:http://www.linganm...
閱讀 2784·2021-11-23 09:51
閱讀 3539·2021-10-08 10:17
閱讀 1273·2021-10-08 10:05
閱讀 1327·2021-09-28 09:36
閱讀 1846·2021-09-13 10:30
閱讀 2186·2021-08-17 10:12
閱讀 1682·2019-08-30 15:54
閱讀 2011·2019-08-30 15:53