我读到设置document.domain = "example.com"
允许我从子域访问父域。
同样的方法会反过来起作用吗?
假设我的主站点在下运行http://example.com。我想通过AJAX(GET&POST)访问的所有API函数都托管在http://API.example.com.上
我能从example.com
访问api.example.com
吗?
EDIT:再次查看document.domain
,我认为这不会解决问题。调用api.example.com的结果不是必需的HTML,而是从api服务器上运行的PHP脚本输出的结果。它可以是JSON、纯文本等,因此无法为此设置document.domain
(因为它不是iframe)。
您需要在两页上都设置document.domain
或者在服务器上设置CORS头:
http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/
CORS 快速概述
Firefox 3.5和Safari 4实现CORS规范,使用作为"API容器"的XMLHttpRequest发送和接收代表web开发人员,从而允许跨站点请求。IE8实现CORS规范的一部分,使用XDomainRequest作为类似的"API容器",实现简单跨站点GET和POST请求。值得注意的是,这些浏览器发送ORIGIN标头,它提供scheme(http://或https://)和生成的页面的域跨站点请求。服务器开发人员必须确保他们发送右侧头球攻门,尤其是的Access Control Allow Origin标头有问题的原产地(或所有域,如果资源公共)。
CORS标准通过添加新的允许服务器将资源提供给许可来源域。浏览器支持这些标头并强制执行限制他们建立了。此外,对于HTTP可能导致用户数据的副作用(在特别是对于其他HTTP方法而不是GET,或者用于POST使用某些MIME类型),规范要求浏览器"预飞行"请求,请求支持的方法从具有HTTP OPTIONS的服务器请求标头,然后来自服务器的"批准",发送实际请求与实际HTTP请求方法。服务器也可以通知客户端是否"凭据"(包括Cookie和HTTP身份验证数据)有请求。