摘要:跨域同源策略所謂同源,就是三個(gè)相同協(xié)議相同域名相同端口相同。同源策略的目的保證用戶信息的安全,防止惡意網(wǎng)站竊取數(shù)據(jù)。是的標(biāo)準(zhǔn),全稱是跨域資源共享。是的一個(gè),可以解決多窗口窗口和之間的消息通信的跨域問題。
JS跨域
同源策略
所謂“同源”,就是“三個(gè)相同”:協(xié)議相同、域名相同、端口相同。
同源策略的目的:保證用戶信息的安全,防止惡意網(wǎng)站竊取數(shù)據(jù)。
如果是非同源,共有三種行為會受到限制:
1.Cookie、LocalStorage、IndexDB無法讀??;
2.DOM無法獲??;(主要場景是ifame跨域的情況,不同域名的iframe是限制互相訪問的)
3.AJAX請求不能發(fā)送;
跨域資源共享(CORS)
html5新增的標(biāo)準(zhǔn),IE10以下不支持。
CORS是W3C的標(biāo)準(zhǔn),全稱是跨域資源共享(Cross-Origin Resource sharing)。CORS定義了必須在訪問跨域資源時(shí),瀏覽器與服務(wù)器應(yīng)該如何溝通。它的思想就是使用自定義的HTTP頭部讓瀏覽器與服務(wù)器進(jìn)行溝通,從而決定請求或響應(yīng)是成功還是失敗。
使用:
對于前端,我們還是正常使用xhr對象發(fā)送ajax請求。唯一需要注意的是,我們需要設(shè)置xhr中的withCredentials為true,不然無法傳遞cookie,xhr.withCredentials=true;
對于服務(wù)端,需要在response header中設(shè)置如下兩個(gè)字段:
Access-Control-Allow-Origin:http://www.yourhost.com
Access-Control-Allow-Credentials:true
JSONP
JSONP的原理:在頁面上引入不同域上的js腳本文件是可以的,所以可以通過動態(tài)創(chuàng)建script標(biāo)簽,然后利用src屬性進(jìn)行跨域。通過將前端方法作為參數(shù)傳遞到服務(wù)器端,然后由服務(wù)器端注入?yún)?shù)之后再返回,實(shí)現(xiàn)服務(wù)器端向客戶端通信。
注:src請求都必須是get方法,就像你在瀏覽器地址欄輸入地址回車一樣。
function fun(fata){ console.log(data); } var body=document.getElementsByTagName("body")[0]; var script=document.getElement("script"); script.type="text/javascript"; script.src="demo.js?callback=fun"; body.appendChild(script); //返回的js腳本直接會執(zhí)行,就執(zhí)行已經(jīng)定義好的fun函數(shù),并且把數(shù)據(jù)傳入進(jìn)來。 fun({"name":"name"})
CORS VS JSONP
都能解決ajax直接請求普通文件存在跨域無權(quán)訪問的問題
1.JSONP只能實(shí)現(xiàn)get請求,而CORS支持所有類型的http請求
2.使用CORS,開發(fā)者可以使用普通的XHR發(fā)起請求和獲得數(shù)據(jù),比起JSONP有更好的錯(cuò)誤處理
3.JSONP主要被老的瀏覽器支持,它們往往不支持CORS,而現(xiàn)代瀏覽器都支持CORS
document.domain
修改document.domain的方法只適用于不同子域的框架間的交互。
對于主域名相同,而子域名不同的情況,可以使用document.domain來跨域 這種方式非常適用于iframe跨域的情況,比如:
a頁面地址為?http://a.yourhost.com?
b頁面為?http://b.yourhost.com。
這樣就可以通過分別給兩個(gè)頁面設(shè)置 document.domain =?http://yourhost.com?來實(shí)現(xiàn)跨域。
之后,就可以通過 parent 或者 window["iframename"]等方式去拿到iframe的window對象了。
postMessage
postMessage是html5的一個(gè)API,可以解決多窗口、窗口和iframe之間的消息通信的跨域問題。
postmessage(data, origin),其中data指的就是需要傳遞的數(shù)據(jù),origin指的是具體的數(shù)據(jù)源地址(包括協(xié)議+域名+端口)。然后window對message事件進(jìn)行監(jiān)聽。
document.getElementById("send").onclick = function() { var msg = document.getElementById("msg").value; var iframeWindow = document.getElementById("iframe").contentWindow; iframeWindow.postMessage(msg,"http://next.com/next.html"); }window.addEventListnerner("message",handle,false){//window對message時(shí)間監(jiān)聽 } function handle(event){ if(event.origin==="http://source.com"){ document.getElementById("msg").innerHTML=event.data; } }以下是接收到的消息:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107631.html
摘要:學(xué)習(xí)建議在學(xué)習(xí)其中一種跨域方法的時(shí)候,建議邊運(yùn)行項(xiàng)目里的,邊在網(wǎng)上搜索博客文章學(xué)習(xí)這種跨域方法,這樣有助于快速并且深入理解跨域。鑒于網(wǎng)上有很多文章詳細(xì)講述跨域知識,只是少了可以本地運(yùn)行的,所以這里就不再贅述跨域知識。 前言 因?yàn)閷W(xué)習(xí)跨域需要配置本地服務(wù)器,可能會比較麻煩,所以自己根據(jù)網(wǎng)上的博客寫了大多數(shù)跨域的簡單demo,可以自己在本地運(yùn)行,而且不用配置服務(wù)器。自己對于跨域的理解剛開始...
摘要:學(xué)習(xí)建議在學(xué)習(xí)其中一種跨域方法的時(shí)候,建議邊運(yùn)行項(xiàng)目里的,邊在網(wǎng)上搜索博客文章學(xué)習(xí)這種跨域方法,這樣有助于快速并且深入理解跨域。鑒于網(wǎng)上有很多文章詳細(xì)講述跨域知識,只是少了可以本地運(yùn)行的,所以這里就不再贅述跨域知識。 前言 因?yàn)閷W(xué)習(xí)跨域需要配置本地服務(wù)器,可能會比較麻煩,所以自己根據(jù)網(wǎng)上的博客寫了大多數(shù)跨域的簡單demo,可以自己在本地運(yùn)行,而且不用配置服務(wù)器。自己對于跨域的理解剛開始...
摘要:學(xué)習(xí)建議在學(xué)習(xí)其中一種跨域方法的時(shí)候,建議邊運(yùn)行項(xiàng)目里的,邊在網(wǎng)上搜索博客文章學(xué)習(xí)這種跨域方法,這樣有助于快速并且深入理解跨域。鑒于網(wǎng)上有很多文章詳細(xì)講述跨域知識,只是少了可以本地運(yùn)行的,所以這里就不再贅述跨域知識。 前言 因?yàn)閷W(xué)習(xí)跨域需要配置本地服務(wù)器,可能會比較麻煩,所以自己根據(jù)網(wǎng)上的博客寫了大多數(shù)跨域的簡單demo,可以自己在本地運(yùn)行,而且不用配置服務(wù)器。自己對于跨域的理解剛開始...
摘要:還是回到萬能的文件,添加匹配規(guī)則實(shí)現(xiàn)代理轉(zhuǎn)發(fā)設(shè)置代理轉(zhuǎn)發(fā)通過上面的設(shè)置,在重啟服務(wù),可以讓頁面中所有包含字段的請求都轉(zhuǎn)為由服務(wù)器去向地址發(fā)送請求,從而巧妙的解決了瀏覽器的跨域問題。 1.Nginx入門與基本操作篇 注:由于服務(wù)器是windows系統(tǒng),所以本文主要講解Nginx在windows下的操作。 首先下載Nginx 解壓縮,我們所有的配置基本都在萬能的 nginx/conf/...
摘要:基本入門前端掘金作者本文屬于翻譯文章,原文鏈接為。如果如何把應(yīng)用放在容器中運(yùn)行掘金本文適合零基礎(chǔ),且希望使用運(yùn)行應(yīng)用的人士。后端掘金使用構(gòu)建網(wǎng)站。 nginx 基本入門 - 前端 - 掘金作者:villainthr 本文屬于翻譯文章,原文鏈接為 nginx Beginner’s Guide。是至今為止見過最好的 nginx 入門文章。額。。。沒有之一。 這篇教程簡單介紹了 nginx ...
閱讀 1004·2021-11-24 10:30
閱讀 2329·2021-10-08 10:04
閱讀 3972·2021-09-30 09:47
閱讀 1453·2021-09-29 09:45
閱讀 1448·2021-09-24 10:33
閱讀 6281·2021-09-22 15:57
閱讀 2361·2021-09-22 15:50
閱讀 4092·2021-08-30 09:45