<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 82, comments - 269, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理



    AJAX不能跨域訪問是什么意思,我想沒有親自遇到這個問題的人,可能根本就不理解.現(xiàn)在我給出一個例子,讓大家體會一下什么是跨域訪問.這個頁面就是一個HTML文件,源碼我附文章后面了.

    注:這個頁面并不高深,例子只有一個HTML頁面,沒有引用什么特別的庫之類的.例子的目的只是讓對AJAX不能跨域訪問有一個感性的認識.就好比,你如何告訴一個沒見過汽車的人,告訴他什么是汽車,講半天,還不如直接給個汽車給他看看,他就知道什么是汽車了.但你要他直接給一個清晰的定義,或者是讓他明白汽車的動力學(xué),這就是很難的了,也不是本文的目的.


    下面這個簡單的代碼只要復(fù)制到一個本地html文件中即可,就可以把任何URL指定的網(wǎng)頁顯示出來[注1],但是同樣的頁面,你如果放到tomcat之類的容器下面,就無法打開,甚至通過網(wǎng)絡(luò)鄰居訪問都不行.

    ?

    分析1:為什么好好的頁面卻得不到期望的結(jié)果:
    為什么JS語法沒有什么問題,放在網(wǎng)絡(luò)鄰居與web容器中就不能正常運行了呢,這就是AJAX所說的不能跨域訪問,因為瀏覽器你這個JS程序是來自容器,它就限制你只能正常訪問同一容器里的的資源[注:2],比如你通過http://www.openj.cn訪問到一個頁面,那么這個頁面的JS就只能訪問openj.cn的資源,而不能訪問www.baidu.com.


    為什么IE在通過本地文件能正常運行這個頁面的,我是在XP下測試的,可能IE把本地這個域處理成了一個特殊的域,從這個域得到的JS程序,權(quán)限可以略微放松些,這樣可能易用性就會好些,要知道安全性與使用的方便性可是此消彼長的關(guān)系.所以IE選擇了易用性,在安全問題上放了一個黃燈,為什么說是黃燈呢,因為它在運行這個頁面時,IE會給出一個安全提示,告訴你這個頁面存在風(fēng)險.

    分析2:為什么要限制AJAX跨域訪問[注3]:
    可以肯定的說是出于安全的需要,但我沒有找到什么資料明確這個問題分析,我只能通過看其它資料來自己體會了,我自己發(fā)現(xiàn)的一個安全問題就是:
    AJAX可能會把用戶的cookie信息泄漏出去,比如我往別用戶的Gmail信箱里面發(fā)嵌有JS腳本的郵件.這些腳本讀取gmail.com域中的cookies信息,然后通過AJAX發(fā)送給我的個人網(wǎng)站,這樣我的個人網(wǎng)站就可以得到這個用戶的Gmail的cookies.我然后把它提取出來,我就可以不用密碼來訪問這個用戶的Gmail郵箱了.
    這個只是我能想到的,我想如果能夠讓AJAX能夠跨域訪問的話,肯定還有其它一些安全問題.


    [1];對這個測試頁面好像只有在一種情況下才能正常執(zhí)行:就是通過IE打開本地文件。如果用FireFox就算是通過本地文件打開它也不能正常運行。
    [2]:為了把問題簡單說明,我說了只能訪問同一容器里面的資源,實際上是不精確的,真正的還是應(yīng)該通過域來區(qū)分,同一個容器里面的資源也可能是指向不同的域.同一個域的各個資源也可能分布在不同的容器中.比如:tomcat中有好2個虛擬目錄,你用不同的域名來指向這兩個虛擬目錄,這個容器中的兩個虛擬目錄就是不同的域了.不同容器的資源也可能屬于同一個域,比如我申請一個域名:openj.cn,我設(shè)置 www.openj.cn指向www.baidu.com,而blog.openj.cn指向www.google.com。這樣baidu與google的首頁就都屬于openj.cn這個域了.
    [3]: 本文沒有區(qū)分AJAX的跨域與JS的跨域,因為AJAX就是通過JS來發(fā)現(xiàn)請求的,它們實際上是一回事。
    [4]: 在代碼中,我定義了變量 var url = 'http://www.google.com';??? 你可以把它修改為任何你能訪問的地址,
    [5]:本文的內(nèi)容全是自己的瞎體會的,如果有什么不對的有高手發(fā)現(xiàn)了,希望大家能指出。這也是本文的主要目的。




    ?

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<HTML xmlns="<HEAD><TITLE>AJAX跨域驗證</TITLE>

    <script>
    var xmlHttp;
    function createXMLHttpRequest() {
    ??? if (window.ActiveXObject) {
    ??????? xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    ??? }
    ??? else if (window.XMLHttpRequest) {
    ??????? xmlHttp = new XMLHttpRequest();
    ??? }
    }

    function hello() {
    ?var url = 'http://www.google.com';???
    ?createXMLHttpRequest();
    ?xmlHttp.onreadystatechange = showResponse;
    ?xmlHttp.open("GET", url, true);
    ?xmlHttp.send(null);
    }

    function showResponse(){
    ? if(xmlHttp.readyState == 4) {
    ?if(xmlHttp.status == 200) {????????
    ?document.getElementById("result").setAttribute("value",xmlHttp.responseText) ;
    ?}
    ?}
    }
    </script>

    </HEAD>

    <BODY>?
    ?<input type="button" value="hello" onclick="hello()"><br/><br/>
    ?<textarea id="result" name="result" cols=100 rows=100 ></textarea>
    </BODY>
    </HTML>

    ?

    ?

    ?


    ?


    評論

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2007-02-12 16:51 by TiGERTiAN
    其實Ajax跨域訪問還是可以解決的,不過需要用到后臺服務(wù)端。
    例如用戶訪問www.go.com,但go.com需要調(diào)用come.com的信息
    那么Ajax將需要跨域的數(shù)據(jù)交給www.go.com/send.asp
    然后再由send.asp發(fā)送到come.com,come.com反饋信息,go收到信息后,再由交給js寫出來,實際開發(fā)中用的就是此方法,前提是此信息不能過于頻繁交換或者流量過大。不知道其他人還有沒有更好的方法。

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2007-02-12 18:38 by emu
    總的來說,跨域我認為是瀏覽器開發(fā)者小心過頭的產(chǎn)物。一個合理的跨域限制策略應(yīng)該是像flash那樣的,讀取一個crossdomain.xml配置文件后就允許或者拒絕訪問。
    Firefox的跨域訪問限制更惡心,一設(shè)置domain以后,連不跨域的請求都被禁止了,真是有病。

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2007-02-15 10:01 by bezy
    AJAX cross-domain js cross-domain 都可以解決的。。
    而且不需要通過后臺。。。。google ajax cross domian ..
    現(xiàn)在流行兩種解決方案。。。

    一種是 iframe 的橋接
    另一種是iframe 的代理

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2007-02-15 11:13 by itspy
    @bezy


    樓上的可以弄一個簡單的例子嗎?比如修改一下上面的示例,如何得到Google首頁的返回?

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2007-02-15 20:14 by TiGERTiAN
    了解。。。Iframe可以連接到外部的網(wǎng)頁而且沒有警告,然后通過js來獲取所需數(shù)據(jù)。。。
    現(xiàn)在好像Webservice可以解決cross-domain的調(diào)用。。就是不太知道如何使用

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2007-06-29 08:24 by newgo
    function hello() {
    var url = 'http://www.google.com';
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = showResponse;
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
    }

    url用'http://www.google.com';要改一下,不然連本地都顯示不了.

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例][未登錄]  回復(fù)  更多評論   

    2008-01-03 16:46 by ben
    一種是 iframe 的橋接 和 另一種是iframe 的代理 是什么意思?

    Webservice可以解決cross-domain的調(diào)用嘛?這么我的不行。。

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2008-06-26 13:43 by pudn
    防止跨域訪問,是為了防止服務(wù)器擁有者或黑客像其他網(wǎng)址提交本站用戶私有信息,如帳號和密碼

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2008-07-20 19:38 by chester
    不懂...url換成別的如baidu就可以了?為什么?

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例][未登錄]  回復(fù)  更多評論   

    2010-10-30 15:25 by k
    我也碰到這樣的問題 怎么解決呢

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例][未登錄]  回復(fù)  更多評論   

    2010-10-30 15:27 by k
    @emu
    贊同!

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2012-10-11 17:00 by 涂老
    jsonp

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2013-08-21 16:16 by sdf
    為什么我的不行呢?

    # re: 初步體驗“AJAX不能跨域訪問”(原創(chuàng))[有源碼,有示例]  回復(fù)  更多評論   

    2013-10-29 22:56 by 3a教程網(wǎng)

    ajax jsonp跨域的方法實例方法
    http://3aj.cn/article/4949.html
    主站蜘蛛池模板: 毛片免费观看的视频在线| 免费在线观看h片| 免费看搞黄视频网站| 国内精品免费视频精选在线观看| 国内精品一级毛片免费看| 无码人妻一区二区三区免费看| 84pao强力永久免费高清| 美女视频黄a视频全免费| 成人在线免费观看| 日本黄页网站免费| 亚洲午夜久久久久久噜噜噜| 久久精品国产亚洲av影院| 亚洲中文字幕久久久一区| 老司机午夜精品视频在线观看免费| 青青操免费在线视频| 成人免费黄色网址| 免费a级毛片永久免费| 亚洲AV永久无码精品一百度影院 | 亚洲大成色www永久网站| 亚洲色成人网一二三区| 国产精品亚洲一区二区在线观看| 好湿好大好紧好爽免费视频 | a级毛片视频免费观看| 日本阿v免费费视频完整版| 国产中文字幕免费| 亚洲AV午夜福利精品一区二区| 亚洲综合精品成人| 97超高清在线观看免费视频| 成人午夜视频免费| 久热综合在线亚洲精品| 亚洲中文字幕无码中文| a级毛片高清免费视频| 日本v片免费一区二区三区| 久久久综合亚洲色一区二区三区| 亚洲JIZZJIZZ妇女| 久久国产精品一区免费下载| 国产在线19禁免费观看国产| 91在线精品亚洲一区二区| 猫咪免费人成在线网站| 波多野结衣免费在线观看| 亚洲精品无码成人片久久|