【发布时间】:2009-05-30 12:40:25
【问题描述】:
假设我有一个域js.mydomain.com,它指向某个IP 地址,而另一个域requests.mydomain.com 指向另一个IP 地址。从js.mydomain.com 下载的.js 文件可以向requests.mydomain.com 发出Ajax 请求吗?
现代浏览器究竟是如何执行同域策略的?
【问题讨论】:
假设我有一个域js.mydomain.com,它指向某个IP 地址,而另一个域requests.mydomain.com 指向另一个IP 地址。从js.mydomain.com 下载的.js 文件可以向requests.mydomain.com 发出Ajax 请求吗?
现代浏览器究竟是如何执行同域策略的?
【问题讨论】:
对您的问题的简短回答是否定的:对于 AJAX 调用,您只能访问与加载页面相同的主机名(和端口/方案)。
有两种解决方法:一种是在foo.example.com 中创建一个URL,作为bar.example.com 的反向代理。只要主机名匹配,浏览器并不关心请求在哪里实际完成。如果您已经有一个前端 Apache 网络服务器,这不会太难。
另一种选择是AJAST,它通过将脚本标签插入到您的文档中来工作。我相信这就是 Google API 的工作方式。
您可以在此处找到关于同源策略的详细说明:http://code.google.com/p/browsersec/wiki/Part2
【讨论】:
这不起作用,因为主机名不同。如果两个页面具有相同的主机、协议和端口,则认为它们来自同一来源。
来自维基百科the same origin policy:
术语“原产地”是使用 域名,应用层 协议和(在大多数浏览器中)TCP 运行的 HTML 文档的端口 脚本。考虑两种资源 当且仅当同源 如果所有这些值都是 一样。
【讨论】: