作者tomin (eclipse)
看板Ajax
标题Re: [问题] 请问XHR跨网域存取有什麽好对策?
时间Sun Nov 30 01:42:44 2008
※ 引述《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="
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)