1. 程式人生 > >ajax跨域問題的另類解決方法

ajax跨域問題的另類解決方法

我們知道瀏覽器基於安全的考慮,AJAX只能訪問本域下的資源,而不能跨域訪問。也就是說,domain1.com站點中的AJAX只能訪問domain1.com站點下的資源,而不能跨域訪問domain2.com站點中的資源.這就是AJAX跨域問題.

但如果要訪問不同域的資料時,由於瀏覽器的安全設定,XMLHTTP沒有許可權獲取資料,而IFRAME沒有許可權將獲取的資料傳遞給父視窗,似乎沒有其它解決辦法。

在網上提到的方法,不外乎這幾種:

1. 如果要獲取的資料位於同一個根域但是不同子域時,可以在指令碼中指定document.domain為父域。

2. 如果要獲取的資料位於不同的根域時,則可以在伺服器上寫一個指令碼作為代理,由伺服器上的指令碼獲取不同域的資料,然後傳遞給在同一個域中的網頁。

3.借用Script的src動態屬性,因為src對域沒有任何限制,但這種方法的缺點是伺服器返回只能是javascript程式碼,這樣的缺陷也就限制了異域名必需是可控的。

另外,我發現還有一種辦法可以解決這個問題。

我們知道,域名只不過是為了便於人們記憶ip而設立的一個助記符而已,而瀏覽器判斷跨域也只是判斷是否在一個子域內,我們完全可以自己定一個dns記錄,把一個子域名指向倒我們需要的伺服器ip上去。換句話說,我們可以使用一個域名,訪問多個伺服器。

例如:

我有一個域名是boolean.net.cn,它指向的ip是:69.89.31.51,而我想訪問yahoo.com上的資料,我完全可以新建一個dns記錄,指向yahoo.com的ip。我通過ping www.yahoo.com.cn獲得ip地址為202.165.102.205

,在自己的dns記錄中新建一個dns記錄yahoo,指向他的ip為 202.165.102.205,這樣,我訪問http://yahoo.boolean.net.cn就相當於訪問yahoo網站一樣了,這樣的話,問題就被轉移到同一個子域下的資料獲取了。

參考頁面