亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js跨域問題淺析及解決方法優缺點對比

2019-11-20 13:56:37
字體:
來源:轉載
供稿:網友

什么是跨域?

概念:只要協議、域名、端口有任何一個不同,都被當作是不同的域。

復制代碼 代碼如下:

URL                      說明       是否允許通信
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允許
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夾 允許
http://www.a.com:8000/a.js
http://www.a.com/b.js 同一域名,不同端口 不允許
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同協議 不允許
http://www.a.com/a.js
http://70.32.92.74/b.js 域名和域名對應ip 不允許
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允許
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二級域名(同上) 不允許(cookie這種情況下也不允許訪問)
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允許

對于端口和協議的不同,只能通過后臺來解決。

跨域資源共享(CORS)

CROS(Cross-Origin Resource Sharing)跨域資源共享,定義了必須在訪問跨域資源時,瀏覽器與服務器應該如何溝通。CROS背后的基本思想就是使用自定義的HTTP頭部讓瀏覽器與服務器進行溝通,從而決定請求或響應是應該成功還是失敗。

復制代碼 代碼如下:

<script type="text/javascript">
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "/trigkit4",true);
    xhr.send();
</script>

以上的trigkit4是相對路徑,如果我們要使用CORS,相關Ajax代碼可能如下所示:

復制代碼 代碼如下:

<script type="text/javascript">
    var xhr = new XMLHttpRequest();
    xhr.open("GET", ");
    xhr.send();
</script>

代碼與之前的區別就在于相對路徑換成了其他域的絕對路徑,也就是你要跨域訪問的接口地址。

服務器端對于CORS的支持,主要就是通過設置Access-Control-Allow-Origin來進行的。如果瀏覽器檢測到相應的設置,就可以允許Ajax進行跨域的訪問。

要解決跨域的問題,我們可以使用以下幾種方法:

通過jsonp跨域

現在問題來了?什么是jsonp?維基百科的定義是:JSONP(JSON with Padding)是資料格式 JSON 的一種“使用模式”,可以讓網頁從別的網域要資料。

JSONP也叫填充式JSON,是應用JSON的一種新方法,只不過是被包含在函數調用中的JSON,例如:

復制代碼 代碼如下:

callback({"name","trigkit4"});

JSONP由兩部分組成:回調函數和數據?;卣{函數是當響應到來時應該在頁面中調用的函數,而數據就是傳入回調函數中的JSON數據。

在js中,我們直接用XMLHttpRequest請求不同域上的數據時,是不可以的。但是,在頁面上引入不同域上的js腳本文件卻是可以的,jsonp正是利用這個特性來實現的。 例如:

復制代碼 代碼如下:

<script type="text/javascript">
    function dosomething(jsondata){
        //處理獲得的json數據
    }
</script>
<script src=">

js文件載入成功后會執行我們在url參數中指定的函數,并且會把我們需要的json數據作為參數傳入。所以jsonp是需要服務器端的頁面進行相應的配合的。

復制代碼 代碼如下:

<?php
$callback = $_GET['callback'];//得到回調函數名
$data = array('a','b','c');//要返回的數據
echo $callback.'('.json_encode($data).')';//輸出
?>

最終,輸出結果為:dosomething(['a','b','c']);

如果你的頁面使用jquery,那么通過它封裝的方法就能很方便的來進行jsonp操作了。

復制代碼 代碼如下:

<script type="text/javascript">
    $.getJSON('http://example.com/data.php?callback=?,function(jsondata)'){
        //處理獲得的json數據
    });
</script>

jquery會自動生成一個全局函數來替換callback=?中的問號,之后獲取到數據后又會自動銷毀,實際上就是起一個臨時代理函數的作用。$.getJSON方法會自動判斷是否跨域,不跨域的話,就調用普通的ajax方法;跨域的話,則會以異步加載js文件的形式來調用jsonp的回調函數。

JSONP的優缺點

JSONP的優點是:它不像XMLHttpRequest對象實現的Ajax請求那樣受到同源策略的限制;它的兼容性更好,在更加古老的瀏覽器中都可以運行,不需要XMLHttpRequest或ActiveX的支持;并且在請求完畢后可以通過調用callback的方式回傳結果。

JSONP的缺點則是:它只支持GET請求而不支持POST等其它類型的HTTP請求;它只支持跨域HTTP請求這種情況,不能解決不同域的兩個頁面之間如何進行JavaScript調用的問題。

CROS和JSONP對比

CORS與JSONP相比,無疑更為先進、方便和可靠。

    1、 JSONP只能實現GET請求,而CORS支持所有類型的HTTP請求。

    2、 使用CORS,開發者可以使用普通的XMLHttpRequest發起請求和獲得數據,比起JSONP有更好的錯誤處理。

    3、 JSONP主要被老的瀏覽器支持,它們往往不支持CORS,而絕大多數現代瀏覽器都已經支持了CORS)。
通過修改document.domain來跨子域

瀏覽器都有一個同源策略,其限制之一就是第一種方法中我們說的不能通過ajax的方法去請求不同源中的文檔。 它的第二個限制是瀏覽器中不同域的框架之間是不能進行js的交互操作的。
不同的框架之間是可以獲取window對象的,但卻無法獲取相應的屬性和方法。比如,有一個頁面,它的地址是http://www.example.com/a.html , 在這個頁面里面有一個iframe,它的src是http://example.com/b.html, 很顯然,這個頁面與它里面的iframe框架是不同域的,所以我們是無法通過在頁面中書寫js代碼來獲取iframe中的東西的:

復制代碼 代碼如下:

<script type="text/javascript">
    function test(){
        var iframe = document.getElementById('ifame');
        var win = document.contentWindow;//可以獲取到iframe里的window對象,但該window對象的屬性和方法幾乎是不可用的
        var doc = win.document;//這里獲取不到iframe里的document對象
        var name = win.name;//這里同樣獲取不到window對象的name屬性
    }
</script>
<iframe id = "iframe" src="

這個時候,document.domain就可以派上用場了,我們只要把http://www.example.com/a.htmlhttp://example.com/b.html這兩個頁面的document.domain都設成相同的域名就可以了。但要注意的是,document.domain的設置是有限制的,我們只能把document.domain設置成自身或更高一級的父域,且主域必須相同。

1.在頁面 http://www.example.com/a.html 中設置document.domain:

復制代碼 代碼如下:

2.在頁面
http://example.com/b.html 中也設置document.domain:

復制代碼 代碼如下:

<script type="text/javascript">
    document.domain = 'example.com';//在iframe載入這個頁面也設置document.domain,使之與主頁面的document.domain相同
</script>

修改document.domain的方法只適用于不同子域的框架間的交互。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情综合亚洲一二区| 亚洲欧美在线免费观看| 国产亚洲激情在线| 国产一区二区视频在线观看| 国产男女猛烈无遮挡91| 久久精品视频99| 欧美电影第一页| 亚洲一区二区黄| 91日韩在线播放| 欧美中文在线观看国产| 91免费欧美精品| 欧美激情2020午夜免费观看| 中文字幕欧美日韩va免费视频| 欧美午夜激情视频| 日韩精品在线免费| 色青青草原桃花久久综合| 在线观看精品自拍私拍| 国产视频福利一区| 亚洲欧洲国产精品| 欧美色videos| 国产69精品久久久久99| 亚洲精品美女在线| 91在线视频精品| 亚洲欧美日韩精品久久亚洲区| 91av在线不卡| 日韩一区二区久久久| 一本色道久久88综合日韩精品| 久久这里有精品| 日韩精品在线视频美女| 久久精品亚洲精品| 成人精品一区二区三区电影黑人| 国产在线a不卡| 亚洲人成免费电影| 久久人人看视频| 国产精品aaa| 国产精品专区h在线观看| 欧美激情乱人伦一区| 欧美激情综合亚洲一二区| 欧美成人在线影院| 日本高清不卡的在线| 91产国在线观看动作片喷水| 久久久久久国产精品久久| 97精品视频在线播放| 91精品国产色综合久久不卡98口| 国产精品第一区| 日韩成人xxxx| 91久久在线播放| 国产精品一区二区三| 欧美肥老妇视频| 欧美激情视频在线| 成人a级免费视频| 亚洲天堂开心观看| 欧美精品久久一区二区| 欧美精品久久久久久久久久| 欧美午夜激情小视频| 国产成人精品在线视频| 亚洲欧美在线看| 亚洲欧美日韩另类| 国产精品自在线| 性欧美暴力猛交69hd| 国产精品白丝av嫩草影院| 国产99久久精品一区二区| 久久久久中文字幕| 韩曰欧美视频免费观看| 国产精品综合久久久| 国产精品视频xxxx| 日韩亚洲第一页| 日韩欧美综合在线视频| 久久久久久噜噜噜久久久精品| 少妇av一区二区三区| 91国产视频在线播放| 国产精品久久久久9999| 成人午夜在线观看| 一区二区三区精品99久久| 亚洲人成毛片在线播放| 国产精品户外野外| 亚洲成人xxx| 欧美精品在线观看91| 欧美性精品220| 成人激情视频免费在线| 国产精品91久久久久久| 久久久精品中文字幕| 久久精品视频在线| 亚洲曰本av电影| 欧美乱妇40p| 国色天香2019中文字幕在线观看| 亚洲一区av在线播放| 欧美日韩中文字幕在线| 尤物99国产成人精品视频| 亚洲综合色激情五月| 欧美亚洲视频一区二区| 午夜精品视频网站| 日韩成人高清在线| 高清欧美性猛交xxxx黑人猛交| 国产成人精品一区二区| 久久久久中文字幕| 中文字幕亚洲天堂| 国产精品久久综合av爱欲tv| 亚洲人成电影网站| 亚洲福利视频二区| 国产精品露脸自拍| 影音先锋欧美在线资源| 欧美一级片久久久久久久| 精品中文字幕在线观看| 日韩中文字幕av| 91精品久久久久久综合乱菊| 国语自产精品视频在免费| 亚洲电影天堂av| 91免费在线视频| 上原亚衣av一区二区三区| 国产欧美日韩中文| 久久伊人精品一区二区三区| 精品国产成人在线| 色爱av美腿丝袜综合粉嫩av| 欧美另类69精品久久久久9999| 一夜七次郎国产精品亚洲| 久久精品视频导航| 亚洲欧美日韩综合| 黑人与娇小精品av专区| 成人激情视频小说免费下载| 亚洲欧美成人精品| 这里只有精品久久| 91久久在线播放| 欧美日韩国内自拍| 久久视频中文字幕| 久久久国产视频| 久久五月天综合| 91精品国产高清自在线看超| 久久久人成影片一区二区三区观看| 8x海外华人永久免费日韩内陆视频| 亚洲欧美三级伦理| 精品一区精品二区| 国产精品扒开腿做爽爽爽男男| 疯狂蹂躏欧美一区二区精品| 中文字幕日韩高清| 91在线观看免费网站| 日本精品视频网站| 成人字幕网zmw| 欧美日韩在线观看视频小说| 精品久久久久久| 92裸体在线视频网站| 日韩精品高清在线观看| 日韩经典中文字幕在线观看| 亚洲伊人久久大香线蕉av| 精品美女永久免费视频| 久精品免费视频| 色综合久综合久久综合久鬼88| 久久久www成人免费精品| 亚洲一级黄色片| 国产亚洲精品va在线观看| 久久噜噜噜精品国产亚洲综合| 成人在线观看视频网站| 成人黄色在线播放| 国产精品国产亚洲伊人久久| 国产一区二区三区在线免费观看| 日本三级久久久| 亚洲性日韩精品一区二区| 88xx成人精品| 亚洲深夜福利视频| 久久精品国产免费观看| 精品国产欧美一区二区三区成人| 色七七影院综合| 黄色一区二区在线观看| 亚洲精品影视在线观看|