Re: [問題] 請問XHR跨網域存取有什麼好對策?
※ 引述《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)
討論串 (同標題文章)
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章