作者TonyQ (沉默是金。)
看板Ajax
标题Re: [问题] cross domain request?
时间Wed Apr 14 22:01:48 2010
※ 引述《flowwinds (..)》之铭言:
: 大家好,
: 最近小弟刚学ajax, ajax的网址就直接连到别的网站去
: 大家好,
: 最近小弟初学ajax, ajax网址是设定连到别的网站去
: 在firefox+firebug环境下一直出现错误讯息"0x80004005 (NS ERROR FAILURE).."
: 後来才查到这可能是作cross domain request造成的
: 到本机端设置server, 并且连结网址设为本机端的就好了..
: 不过想请教各位先进..为何不能用XHR作cross domain request呢?
: 谢谢..
安全性理由 , 如果你了解 session 原理 , 解释起来会更简单.
简单来讲 , 如果开放 cross domain request , 那可能会发生以下情形 .
1. 我平常会习惯性设定自动登入 gmail/facebook跟其他网站 ,
2. 我明明在浏览B网站 , 他却一直request和他不相关的A网站 .
而且还刚好是我习惯自动登入的这类网站 ,
於是我可能在毫无警示的状况下 ,
被取走我 facebook的基本资料 , 好友资料 ,
甚至夸张一点的 , 被砍掉我所有facebook资料 ,
就只因为我B网站页面的 js 有权限代表[我]去浏览A网站 ,
并进行 get/post 行为 , 你说这是不是很可怕. XD
(这里有个重点中的重点 , 执行js时 , 执行客体是使用者本身 ,
也就是浏览这个网页的每个使用者 , 而不是这个站.)
故 js 无法透过 xmlHttpRequest 或 iframe , 去[取得]任何外站的资料.
(触发浏览行为 ,像window.open则是 OK 的.)
唯一的例外就是从外站读入 javascript 档案/图片 ,
所以很多网站提供 json 格式资料以供外部存取 .
对於 cross domain request 的对应方式 ,
通常都是透过 server side 的代理去存取对方网站 .
这时候之所以会 ok 的理由在於 , 执行客体变成网站本身 ,
也就是使用者教唆网站去对其他网站页面进行存取 ,
就不会出现如前所述无法避免的安全性问题了.
(毕竟站对站不会有使用者的session资料 ,
相对的 , 对於一些需要帐密存取的网站 ,
就需要使用者提供帐号给网站才能代理操作.)
--
What do you want to have ? / What do you have?
从书本中,你可以发现我的各种兴趣。
从CD中,你可以了解我所喜欢的偶像明星。
或许从文字你很难以了解一个人,但从物品可以。
My PPolis , My past. http://ppolis.tw/user/Tony
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.218.161
1F:推 flowwinds:谢谢, 相当详细的解释 04/14 22:29
2F:推 aiyswu:勉强になりましたXD 04/16 03:25