Re: [問題] 請問XHR跨網域存取有什麼好對策?

看板Ajax作者 (eclipse)時間17年前 (2008/11/30 01:42), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/7 (看更多)
※ 引述《TonyQ (沉默是金)》之銘言: : ※ 引述《liaosankai (低溫烘焙)》之銘言: : : 使用ajax的人應該都知道存在著XHR跨網域存取禁止問題 : : 我找一篇是使用DSSO的方式解決 : : http://www.blogjava.net/hunteva/archive/2007/06/13/dsso.html : : 有更好的辦法嗎? 我沒聽過DSSO 不過他看起來就是js的解法 請參考拙作 用js解決cross domain 我是改別人寫好的 其實自己也不太懂:) http://lyricapi.googlepages.com/give-me-lyrics.html 它的原理: 比如說你希望PTT能夠cross domain http://ptt.cc 那你網頁就必須這樣寫<script src="" rel="nofollow">http://ptt.cc/return.js">之類的 就像TonyQ說的 要由PTT(server)那端 幫你(client)查詢 而PTT那邊就必須要有個程式,能夠單純的只回傳javascript。   像這樣:http://lyricwiki.org/api.php?artist=U2&song=ONE&fmt=js : 先講結論: : 1.期待 firefox 承諾過的 cross domain http request. : (不過就算有也是firefox only) Firefox可以,IE7用https也可以,但我只在單一本機測成功過,無法擴及一般使用者。 總之限制太多不實用。 詳情請看: http://www.dotblogs.com.tw/wxvbbo/archive/2008/04/20/2963.aspx : 2.server side 的 proxy法 這種proxy,其實就是上面說的js法。XD 也就是把php當作proxy,輸出js。 我想像中的proxy法,則是一個獨立server A。 我們client,透過proxy server A,再去跟server B要資料。 A, B不一定要同一個domain。 例子 client: localhost proxy : http://wretch.cc 具備php, jsp, pl等,不受限cross domain的程式。 server: http://ptt.cc 這種也行得通。 : 3.轉換為可以存取的操作. : (ex. js、img 等可以cross domain的方案.) : ──────────────────────────────── : 基本上我們在碰到「跨網域存取」這個問題 , : 會有問題的主要是在於 html的存取 , : 如果你的問題不需要存取別的網頁的html就能解決 , : 自然這問題就不會發生在你身上. : 如果你非得存取不可 , 很簡單把request的資料送給server , : 讓server用他的身份開socket 去存取目標網站 , 取得對應的回應 , : 不然可以隨便用使用者的request去存取別的網站, 那就真的會天下大亂了. : 轉換為 js , 也就是你提得link的作法是合理 , 但根據我的開發經驗 , : 真正會碰到 cross domain 問題的往往不是這裡... : 會能夠cross domain 又能拿到理想的.js , : 除非是有開放 json 型態的 api , 或是對方配合度很高. XD 重點來啦,對方若是有提供json,一切就搞定啦! 有json就可以安心的存取,不必擔心cross domain。 例如:http://lyricwiki.org/api.php?artist=U2&song=ONE&fmt=json 對方網頁根目錄有放crossdomain.xml的話,就還有Flash解法: http://lyricapi.googlepages.com/ http://lyricwiki.org/crossdomain.xml P.S.哈,不好意思,因為要說清楚一點,稍微打了廣告。:P -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.40.91 ※ 編輯: tomin 來自: 118.168.40.91 (11/30 01:47)
文章代碼(AID): #19CNyLZA (Ajax)
討論串 (同標題文章)
文章代碼(AID): #19CNyLZA (Ajax)