国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ajax之面試必問跨域問題

wind3110991 / 515人閱讀

摘要:可以說是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。只能設(shè)置為主域名,不可以在中將設(shè)置為。問題安全性,當(dāng)一個(gè)站點(diǎn)被攻擊后,另一個(gè)站點(diǎn)會(huì)引起安全漏洞。在此處執(zhí)行利用和這個(gè)辦法比較繞,但是可以解決完全跨域情況下的腳步置換問題。

ajax之面試必問跨域問題,如果你知道jsonp就弱爆了,往深處稍微問那么一丟丟,你就會(huì)被虐的萬劫不復(fù)...個(gè)人總結(jié)ajax:

1、什么是跨域
2、document.domain+iframe的設(shè)置
3、動(dòng)態(tài)創(chuàng)建script
4、利用iframe和location.hash
5、window.name實(shí)現(xiàn)的跨域數(shù)據(jù)傳輸
6、使用HTML5 postMessage
7、利用flash

1、跨域是有瀏覽器的同源策略引起的(一定要記住通同源策略引起的)

同源策略:同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會(huì)受到影響。可以說Web是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。所謂同源是指,域名,協(xié)議,端口相同。不同源的客戶端腳本(javascript、ActionScript)在沒明確授權(quán)的情況下,不能讀寫對(duì)方的資源。
看看下面的表格,分析下主域名和子域名,跨域和IP是不同的,詳見表格吧~

2、document.domain+iframe的設(shè)置

對(duì)于主域相同而子域不同的例子,可以通過設(shè)置document.domain的辦法來解決。具體的做法是可以在http://www.a.com/a.html和http://script.a.com/b.html兩個(gè)文件中分別加上document.domain = ‘a(chǎn).com’;然后通過a.html文件中創(chuàng)建一個(gè)iframe,去控制iframe的contentDocument,這樣兩個(gè)js文件之間就可以“交互”了。當(dāng)然這種辦法只能解決主域相同而二級(jí)域名不同的情況,如果你異想天開的把script.a.com的domian設(shè)為alibaba.com那顯然是會(huì)報(bào)錯(cuò)地!代碼如下:
www.a.com上的a.html

document.domain = "a.com";
var ifr = document.createElement("iframe");
ifr.src = "http://script.a.com/b.html";
ifr.style.display = "none";
document.body.appendChild(ifr);
ifr.onload = function(){
    var doc = ifr.contentDocument || ifr.contentWindow.document;
    // 在這里操縱b.html
    alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);
};

script.a.com上的b.html

document.domain = "a.com";

這種方式適用于{www.kuqin.com, kuqin.com, script.kuqin.com, css.kuqin.com}中的任何頁面相互通信。

備注:某一頁面的domain默認(rèn)等于window.location.hostname。主域名是不帶www的域名,例如a.com,主域名前面帶前綴的通常都為二級(jí)域名或多級(jí)域名,例如www.a.com其實(shí)是二級(jí)域名。 domain只能設(shè)置為主域名,不可以在b.a.com中將domain設(shè)置為c.a.com。

問題:
1、安全性,當(dāng)一個(gè)站點(diǎn)(b.a.com)被攻擊后,另一個(gè)站點(diǎn)(c.a.com)會(huì)引起安全漏洞。
2、如果一個(gè)頁面中引入多個(gè)iframe,要想能夠操作所有iframe,必須都得設(shè)置相同domain。

2、動(dòng)態(tài)創(chuàng)建script

雖然瀏覽器默認(rèn)禁止了跨域訪問,但并不禁止在頁面中引用其他域的JS文件,并可以自由執(zhí)行引入的JS文件中的function(包括操作cookie、Dom等等)。根據(jù)這一點(diǎn),可以方便地通過創(chuàng)建script節(jié)點(diǎn)的方法來實(shí)現(xiàn)完全跨域的通信。具體的做法可以參考YUI的Get Utility

這里判斷script節(jié)點(diǎn)加載完畢還是蠻有意思的:ie只能通過script的readystatechange屬性,其它瀏覽器是script的load事件。以下是部分判斷script加載完畢的方法。

js.onload = js.onreadystatechange = function() {
    if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
        // callback在此處執(zhí)行
        js.onload = js.onreadystatechange = null;
    }
};
利用iframe和location.hash

這個(gè)辦法比較繞,但是可以解決完全跨域情況下的腳步置換問題。原理是利用location.hash來進(jìn)行傳值。在url: http://a.com#helloword中的‘#helloworld’就是location.hash,改變hash并不會(huì)導(dǎo)致頁面刷新,所以可以利用hash值來進(jìn)行數(shù)據(jù)傳遞,當(dāng)然數(shù)據(jù)容量是有限的。假設(shè)域名a.com下的文件cs1.html要和cnblogs.com域名下的cs2.html傳遞信息,cs1.html首先創(chuàng)建自動(dòng)創(chuàng)建一個(gè)隱藏的iframe,iframe的src指向cnblogs.com域名下的cs2.html頁面,這時(shí)的hash值可以做參數(shù)傳遞用。cs2.html響應(yīng)請(qǐng)求后再將通過修改cs1.html的hash值來傳遞數(shù)據(jù)(由于兩個(gè)頁面不在同一個(gè)域下IE、Chrome不允許修改parent.location.hash的值,所以要借助于a.com域名下的一個(gè)代理iframe;Firefox可以修改)。同時(shí)在cs1.html上加一個(gè)定時(shí)器,隔一段時(shí)間來判斷l(xiāng)ocation.hash的值有沒有變化,一點(diǎn)有變化則獲取獲取hash值。代碼如下:

先是a.com下的文件cs1.html文件:

function startRequest(){
    var ifr = document.createElement("iframe");
    ifr.style.display = "none";
    ifr.src = "http://www.cnblogs.com/lab/cscript/cs2.html#paramdo";
    document.body.appendChild(ifr);
}

function checkHash() {
    try {
        var data = location.hash ? location.hash.substring(1) : "";
        if (console.log) {
            console.log("Now the data is "+data);
        }
    } catch(e) {};
}
setInterval(checkHash, 2000);

cnblogs.com域名下的cs2.html:

//模擬一個(gè)簡單的參數(shù)處理操作
switch(location.hash){
    case "#paramdo":
        callBack();
        break;
    case "#paramset":
        //do something……
        break;
}

function callBack(){
    try {
        parent.location.hash = "somedata";
    } catch (e) {
        // ie、chrome的安全機(jī)制無法修改parent.location.hash,
        // 所以要利用一個(gè)中間的cnblogs域下的代理iframe
        var ifrproxy = document.createElement("iframe");
        ifrproxy.style.display = "none";
        ifrproxy.src = "http://a.com/test/cscript/cs3.html#somedata";    // 注意該文件在"a.com"域下
        document.body.appendChild(ifrproxy);
    }
}

a.com下的域名cs3.html

//因?yàn)閜arent.parent和自身屬于同一個(gè)域,所以可以改變其location.hash的值
parent.parent.location.hash = self.location.hash.substring(1);
4、window.name實(shí)現(xiàn)的跨域數(shù)據(jù)傳輸 5、使用HTML5 postMessage 6、利用flash

詳細(xì)的介紹請(qǐng)查看http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html#m3此鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/78939.html

相關(guān)文章

  • ajax面試必問跨域問題

    摘要:可以說是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。只能設(shè)置為主域名,不可以在中將設(shè)置為。問題安全性,當(dāng)一個(gè)站點(diǎn)被攻擊后,另一個(gè)站點(diǎn)會(huì)引起安全漏洞。在此處執(zhí)行利用和這個(gè)辦法比較繞,但是可以解決完全跨域情況下的腳步置換問題。 ajax之面試必問跨域問題,如果你知道jsonp就弱爆了,往深處稍微問那么一丟丟,你就會(huì)被虐的萬劫不復(fù)...個(gè)人總結(jié)ajax: 1、什么是跨域2、d...

    alaege 評(píng)論0 收藏0
  • ajax面試必問跨域問題

    摘要:可以說是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。只能設(shè)置為主域名,不可以在中將設(shè)置為。問題安全性,當(dāng)一個(gè)站點(diǎn)被攻擊后,另一個(gè)站點(diǎn)會(huì)引起安全漏洞。在此處執(zhí)行利用和這個(gè)辦法比較繞,但是可以解決完全跨域情況下的腳步置換問題。 ajax之面試必問跨域問題,如果你知道jsonp就弱爆了,往深處稍微問那么一丟丟,你就會(huì)被虐的萬劫不復(fù)...個(gè)人總結(jié)ajax: 1、什么是跨域2、d...

    Lyux 評(píng)論0 收藏0
  • 一篇文章搞明白CORS跨域

    摘要:跨域?qū)嵲谑敲嬖嚬僖粋€(gè)人的利器。首先,什么是是一個(gè)標(biāo)準(zhǔn),全稱是跨域資源共享。它的值是一個(gè)布爾值,表示是否允許發(fā)送。設(shè)為,即表示服務(wù)器明確許可,可以包含在請(qǐng)求中,一起發(fā)給服務(wù)器。 面試問到數(shù)據(jù)交互的時(shí)候,經(jīng)常會(huì)問跨域如何處理。大部分人都會(huì)回答JSONP,然后面試官緊接著就會(huì)問:JSONP缺點(diǎn)是什么啊?這個(gè)時(shí)候坑就來了,如果面試者說它支持GET方式,然后面試官就會(huì)追問,那如果POST方式發(fā)送...

    tanglijun 評(píng)論0 收藏0
  • 2019前端秋季社招面試經(jīng)歷總結(jié)(三年經(jīng)驗(yàn))

    摘要:經(jīng)歷月份開放的簡歷,收到了蠻多詢問和面試,算是招人旺季,需要跳槽的小伙伴抓住機(jī)會(huì)。現(xiàn)在是面試了家公司左右,有些高頻問題會(huì)標(biāo)記次數(shù)總次數(shù),可供大家參考。最后祝大家面試順利,拿到心儀的,寫錯(cuò)的地方請(qǐng)不吝賜教,謝謝。 經(jīng)歷 7月份開放的簡歷,收到了蠻多詢問和面試,算是招人旺季,需要跳槽的小伙伴抓住機(jī)會(huì)。一開始廣泛看面試題,沒抓住重點(diǎn)復(fù)習(xí),有很多平時(shí)也沒怎么用到,導(dǎo)致一開始面試的時(shí)候,問的問題...

    Kross 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<