为什么AJAX请求仅限于同一个域?

时间:2010-07-01 09:56:55

标签: javascript ajax xss same-origin-policy

我发现真的令人困惑的是,为什么AJAX请求仅限于同一个域?这背后的原因是什么?

我没有看到从外部位置请求文件有任何问题,而且制作XMLHTTP请求的服务器似乎也可以获取并发布到外部位置。

4 个答案:

答案 0 :(得分:17)

想象一下:

你来到我神话般的网站www.halfnakedgirls.com。你可以看到有关人体生理学的技术文档看起来很有趣,但在你的背后,有些JavaScript行正在向另一个域执行一些请求,比方说www.yourpaypallike.com。

http://www.yourpaypallike.com/account/transfer?to=badguy@evilwebsite.com&amount=984654http://www.mymailprovider.com/mails/export?format=csv等请求。

你现在明白为什么被禁止了吗? =)

答案 1 :(得分:3)

Tom,这不是“Ajax请求限制”。 AJAX基于JavaScript。出于安全原因,JavaScript禁止跨域访问。如果你真的想要跨域Ajax,你可以做一个黑客。

YourPage(Ajax)----> YourServer ----> ExternalDomain

您可以使用Ajax调用服务器中的页面,您的域将使用服务器端调用外部域,然后获取结果然后返回给您作为Ajax响应。 当然,对ExternalDomain服务器的请求将被调用,而不会发送驻留在浏览器内存中的ExternalDomain的cookie。那是因为请求是由您的服务器完成的,而不是您的浏览器。

答案 2 :(得分:1)

出于安全目的 - 如果一个网站可以在客户端执行他们想要的任何域名的AJAX调用,那么就会带来严重的风险。

虽然有很多方法可以解决这个问题 - 您可以在同一个域上调用您的AJAX脚本,然后可以从另一个域调用脚本并返回它。这不会使用浏览器作为通信媒介,而是使用您的网络服务器。

答案 3 :(得分:0)

以下是满足您问题的一些信息: http://en.wikipedia.org/wiki/Same_origin_policy