从父域到子域的JavaScript访问?

时间:2011-06-08 11:19:19

标签: javascript cross-domain cross-domain-policy

我已经读过设置document.domain = "example.com"让我从子域访问父域。

相反的方法会相反吗?

假设我的主网站在 http://example.com 下运行。我想通过AJAX(GET和POST)访问的所有API函数都托管在 http:// api .example.com 上。

我是否可以从api.example.com访问example.com

编辑:再次关注document.domain,我认为这不会解决问题。调用 api .example.com 的结果不是必需的HTML,而是从API服务器上运行的PHP脚本输出。它可以是JSON,纯文本等,因此无法为此设置document.domain(因为它不是iframe)。

1 个答案:

答案 0 :(得分:7)

您需要在两页上设置document.domain

或者在服务器上设置CORS标头:

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

  

CORS快速概述

     

Firefox 3.5和Safari 4实现了   CORS规范,使用   XMLHttpRequest作为“API容器”   发送和接收的   适当的标题代表   Web开发人员,因此允许   跨站请求。 IE8实现   使用CORS规范的一部分   XDomainRequest作为类似的“API   容器“用于CORS,使简单   跨站点GET和POST请求。   值得注意的是,这些浏览器发送了   ORIGIN标题,提供了   scheme(http://或https://)和   正在制作的网页的域名   跨站请求。服务开发者   必须确保他们发送   正确的回头,特别是   Access-Control-Allow-Origin标头   有问题的ORIGIN(或“*”代表   所有域,如果资源是   公共)。

     

CORS标准的工作原理是添加新的   允许服务器访问的HTTP标头   为准许来源提供资源   域。浏览器支持这些   标题并强制执行限制   他们建立。另外,对于HTTP   请求可能导致的方法   对用户数据的副作用(in   特别是对于其他HTTP方法   比GET,或用于POST的   某些MIME类型),规范   要求浏览器“预检”   请求,征求支持的方法   来自具有HTTP OPTIONS的服务器   请求标题,然后,在   来自服务器的“批准”,发送   与实际的实际请求   HTTP请求方法。服务器也可以   通知客户是否“凭据”   (包括Cookie和HTTP   应发送认证数据)   有请求。