国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 網(wǎng)站 > 網(wǎng)頁設(shè)計 > 正文

web開發(fā)教程之跨域的解決方案詳解

2024-08-30 08:33:26
字體:
供稿:網(wǎng)友

前言

本文主要給大家介紹了關(guān)于web開發(fā)之跨域的解決方案,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

什么是跨域?

概念如下:只要協(xié)議、域名、端口有任何一個不同,都被當作是不同的域

下面是具體的跨域情況詳解

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 同一域名,不同協(xié)議 不允許
http://www.a.com/a.js、http://70.32.92.74/b.js 域名和域名對應(yīng)ip 不允許
http://www.a.com/a.js、http://script.a.com/b.js 主域相同,子域不同 不允許(cookie這種情況下也不允許訪問)
http://www.a.com/a.js、http://a.com/b.js 同一域名,不同二級域名(同上) 不允許(cookie這種情況下也不允許訪問)
http://www.cnblogs.com/a.js、http://www.a.com/b.js 不同域名 不允許

一、document.domain跨域

原理:相同主域名不同子域名下的頁面,可以設(shè)置document.domain讓它們同域

限制:同域document提供的是頁面間的互操作,需要載入iframe頁面

下面幾個域名下的頁面都是可以通過document.domain跨域互操作的: http://a.com/foo, http://b.a.com/bar, http://c.a.com/bar。 但只能以頁面嵌套的方式來進行頁面互操作,比如常見的iframe方式就可以完成頁面嵌套

// URL http://a.com/foovar ifr = document.createElement('iframe');ifr.src = 'http://b.a.com/bar'; ifr.onload = function(){    var ifrdoc = ifr.contentDocument || ifr.contentWindow.document;    ifrdoc.getElementsById("foo").innerHTML);};ifr.style.display = 'none';document.body.appendChild(ifr);

上述代碼所在的URL是http://a.com/foo,它對http://b.a.com/bar的DOM訪問要求后者將 document.domain往上設(shè)置一級

// URL http://b.a.com/bardocument.domain = 'a.com'

document.domain只能從子域設(shè)置到主域,往下設(shè)置以及往其他域名設(shè)置都是不允許的, 在Chrome中給出的錯誤是這樣的

Uncaught DOMException: Failed to set the 'domain' property on 'Document': 'baidu.com' is not a suffix of 'b.a.com'

二、有src的標簽

原理:所有具有src屬性的HTML標簽都是可以跨域的,包括<img>, <script>

限制:需要創(chuàng)建一個DOM對象,只能用于GET方法

document.body中append一個具有src屬性的HTML標簽, src屬性值指向的URL會以GET方法被訪問,該訪問是可以跨域的

其實樣式表的<link>標簽也是可以跨域的,只要是有src或href的HTML標簽都有跨域的能力

不同的HTML標簽發(fā)送HTTP請求的時機不同,例如<img>在更改src屬性時就會發(fā)送請求,而script, iframe, link[rel=stylesheet]只有在添加到DOM樹之后才會發(fā)送HTTP請求:

var img = new Image();img.src = 'http://some/picture';        // 發(fā)送HTTP請求var ifr = $('<iframe>', {src: 'http://b.a.com/bar'});$('body').append(ifr);                  // 發(fā)送HTTP請求

三、JSONP

原理:<script>是可以跨域的,而且在跨域腳本中可以直接回調(diào)當前腳本的函數(shù)

限制:需要創(chuàng)建一個DOM對象并且添加到DOM樹,只能用于GET方法

JSONP利用的是<script>可以跨域的特性,跨域URL返回的腳本不僅包含數(shù)據(jù),還包含一個回調(diào)

// URL: http://b.a.com/foovar data = {    foo: 'bar',    bar: 'foo'};callback(data);

然后在我們在主站http://a.com中,可以這樣來跨域獲取http://b.a.com的數(shù)據(jù):

// URL: http://a.com/foovar callback = function(data){    // 處理跨域請求得到的數(shù)據(jù)};var script = $('<script>', {src: 'http://b.a.com/bar'});$('body').append(script);

其實jQuery已經(jīng)封裝了JSONP的使用,我們可以這樣來

$.getJSON( "http://b.a.com/bar?callback=callback", function( data ){    // 處理跨域請求得到的數(shù)據(jù)});

$.getJSON與$.get的區(qū)別是前者會把responseText轉(zhuǎn)換為JSON,而且當URL具有callback參數(shù)時, jQuery將會把它解釋為一個JSONP請求,創(chuàng)建一個<script>標簽來完成該請求

四、navigation 對象

原理:iframe之間是共享navigator對象的,用它來傳遞信息

要求:IE6/7

有些人注意到了IE6/7的一個漏洞:iframe之間的window.navigator對象是共享的。 我們可以把它作為一個Messenger,通過它來傳遞信息。比如一個簡單的委托:

// a.comnavigation.onData(){    // 數(shù)據(jù)到達的處理函數(shù)}typeof navigation.getData === 'function'     || navigation.getData()
// b.comnavigation.getData = function(){    $.get('/path/under/b.com')        .success(function(data){            typeof navigation.onData === 'function'                || navigation.onData(data)        });}

document.navigator類似,window.name也是當前窗口所有頁面所共享的。也可以用它來傳遞信息。 同樣蛋疼的辦法還有傳遞Hash(有些人叫錨點),這是因為每次瀏覽器打開一個URL時,URL后面的#xxx部分會保留下來,那么新的頁面可以從這里獲得上一個頁面的數(shù)據(jù)

五、跨域資源共享(CORS)

原理:服務(wù)器設(shè)置Access-Control-Allow-OriginHTTP響應(yīng)頭之后,瀏覽器將會允許跨域請求

限制:瀏覽器需要支持HTML5,可以支持POST,PUT等方法

前面提到的跨域手段都是某種意義上的Hack, HTML5標準中提出的跨域資源共享(Cross Origin Resource Share,CORS)才是正道。 它支持其他的HTTP方法如PUT, POST等,可以從本質(zhì)上解決跨域問題。

例如,從http://a.com要訪問http://b.com的數(shù)據(jù),通常情況下Chrome會因跨域請求而報錯

XMLHttpRequest cannot load http://b.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://a.com' is therefore not allowed access

錯誤原因是被請求資源沒有設(shè)置Access-Control-Allow-Origin,所以我們在b.com的服務(wù)器中設(shè)置這個響應(yīng)頭字段即可

Access-Control-Allow-Origin: *              # 允許所有域名訪問,或者Access-Control-Allow-Origin: http://a.com   # 只允許所有域名訪問

六、window.postMessage

原理:HTML5允許窗口之間發(fā)送消息

限制:瀏覽器需要支持HTML5,獲取窗口句柄后才能相互通信

這是一個安全的跨域通信方法,postMessage(message,targetOrigin)也是HTML5引入的特性。 可以給任何一個window發(fā)送消息,不論是否同源。第二個參數(shù)可以是*但如果你設(shè)置了一個URL但不相符,那么該事件不會被分發(fā)。看一個普通的使用方式吧

// URL: http://a.com/foovar win = window.open('http://b.com/bar');win.postMessage('Hello, bar!', 'http://b.com');
// URL: http://b.com/barwindow.addEventListener('message',function(event) {    console.log(event.data);});

七、訪問控制安全的討論

在HTML5之前,JSONP已經(jīng)成為跨域的事實標準了,jQuery都給出了支持。 值得注意的是它只是Hack,并沒有產(chǎn)生額外的安全問題。 因為JSONP要成功獲取數(shù)據(jù),需要跨域資源所在服務(wù)器的配合,比如資源所在服務(wù)器需要自愿地回調(diào)一個合適的函數(shù),所以服務(wù)器仍然有能力控制資源的跨域訪問

跨域的正道還是要使用HTML5提供的CORS頭字段以及window.postMessage, 可以支持POST, PUT等HTTP方法,從機制上解決跨域問題。 值得注意的是Access-Control-Allow-Origin頭字段是資源所在服務(wù)器設(shè)置的, 訪問控制的責任仍然是在提供資源的服務(wù)器一方,這和JSONP是一樣的

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
超碰免费在线播放| 国产黄色片中文字幕| 国产91久久久久| 国产污污在线观看| 国产超碰在线| 日本aⅴ写真网站免费| 日本成人a视频| 国产鲁鲁视频在线观看特色| 中文字幕在线免费视频| 国产成人精品自线拍| 五月婷婷视频在线观看| 国产三级做爰在线观看| 在线国产小视频| 成年网在线观看免费观看网址| 国产黄色网页| 久久国产热视频| 精品一二三区视频| 国产在线精品一区二区不卡| 国产三级自拍| 九九视频精品在线| 在线国产网址| 国产一级电影网| wwwww亚洲| 国产精美视频| 免费a级毛片在线观看| 国产成人高清精品| 亚洲视频在线观看不卡| 国产一级免费看| 激情丁香在线| 日本视频三区| 精品日韩av| 国产三区四区在线观看| 国产乱精品一区二区三区| 轻轻色免费在线视频| 亚洲天堂影院在线观看| 国产wwww| 国产黄在线观看免费观看不卡| 国产精品自产拍在线网站| 久精品在线观看| 久热中文字幕在线观看| 日本天堂影院在线视频| 91精品专区| 91看片在线观看| 国产第一页在线视频| 国产精品美女一区二区三区四区| 中文字幕第一页在线| 中文字幕不卡| 国产精品入口麻豆免费| 国产精品视频一区麻豆| 国产高清在线| 在线播放www| eeuss影院在线| 麻豆精品不卡国产免费看| 欧美日韩国产亚洲沙发| 久久99亚洲网美利坚合众国| 国精一区二区三区| 免费看成年人视频在线观看| 丁香在线视频| 精品一区二区在线欧美| 欧美色第一页| 国产精品视频流白浆免费视频 | 国产精品99爱免费视频| 97高清视频| 青青草原国产在线观看| 国产永久免费高清在线观看| 国产丝袜在线| a级片国产精品自在拍在线播放| а天堂8中文最新版在线官网| 亚洲日本久久久午夜精品| 久久五月精品中文字幕 | 国产亚洲精品久久久久久移动网络| 国产羞羞视频在线播放| 一二三四区在线观看| 国产女王在线**视频 | 精品视频二区| 一本大道久久a久久精品| 老司机在线视频二区| 国产精品剧情一区二区三区| a视频在线看| 91极品在线| 最近中文字幕大全中文字幕免费 | 国产毛片毛片| 在线观看中文字幕| 国产鲁鲁视频在线观看免费 | 不卡av免费观看| 日本中文字幕在线观看| a视频在线播放| 夜夜爽视频导航| 精品国产高清自在线一区二区三区| 激情亚洲综合网| 青青青手机在线视频观看| 国产精品久久久久一区二区国产 | 中文字幕成人乱码在线电影| 日本一卡二卡四卡精品| 99精品老司机免费视频| 国产经典av| 国产网站av| 国产中文字幕在线观看| 天天激情综合| 在线免费国产视频| 精品成人免费自拍视频| 国产高清大尺度一区二区不卡| 国产乱在线观看视频| 久久五月精品| xxxx视频在线| 激情六月婷婷| 天天操人人干| 国产一二区视频| 中文字幕网在线| 国产精品视频一区麻豆| 69精品视频| 在线观看中文| 在线国产一级| 亚洲精品男人| 日本h视频在线观看| а天堂8中文最新版在线官网| 日本欧洲一区| 最新天堂资源在线资源| 国产xxxx做受性欧美88| 在线午夜视频| 日本啊v在线| 国产午夜电影| av在线天天| 在线91av| 四虎a级欧美在线观看| 欧洲一区av| 国产区视频在线观看| 国产高潮av| 欧美色第一页| 国产精品粉嫩av| 麻豆视频国产| 国产超级va在线视频| wwww在线观看| 国产成人综合亚洲欧美在| 欧美日韩不卡中文字幕在线| 国产人成在线观看| 美女av在线播放| 在线免费黄色毛片| 中文字幕在线影视资源| 亚洲图区综合| 国产区视频在线观看| xxxxx中文字幕| 国产高清在线观看| 九九视频九九热| av在线free| 精品美女视频在线观看免费软件| 国产在线精品一区二区不卡| 亚洲精品午夜级久久久久| 国产亚洲精品午夜高清影院| 免费在线黄色av| www.麻豆av.com| 亚洲精品国自产拍在线观看| 国产极品嫩模在线视频一区| 日本中文字幕视频| 国产麻豆综合视频在线观看| 天堂中文在线观看| 99精品老司机免费视频| 最近最好的中文字幕2019免费| a级片国产精品自在拍在线播放| 91麻豆精品国产91久久| 国产成人精品久久一区二区小说| 国产精品伦一区二区三区级视频频| 国产精品午夜久久久久久| 国产精品自产拍在线观看2019| 黄色片视频在线观看| 国产在线观看色| 九色视频网站| 国产婷婷视频在线| ·天天天天操| 99中文字幕一区| 日本一本久久| 黄色av网址在线免费观看| 黄色毛片在线观看| 国产乱妇乱子| 91社区在线观看| 在线观看中文字幕一区| 亚洲精品视频区| 激情综合网五月激情| 午夜伦全在线观看| 精品一区二区三区在线观看l| av男人的天堂网| 国内精品一区视频| 国产精品欧美色图| 99综合精品久久| 免费在线看v| 国产午夜精品一区理论片| 国产xxxxx| 日本不卡影院| 国产精品视频一区二区久久 | 伊人网站在线| 国产美女视频一区二区二三区| 国产九色在线| 在线观看中文| 中文字幕在线播放网址| 亚洲妇熟xxxx妇色黄| 国产午夜在线观看| 欧美色第一页| 中文一区在线观看| 最近中文字幕mv免费高清在线| 一级二级在线观看|