18

我已阅读该设置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)。

4

1 回答 1

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作为 CORS 的类似“API 容器”,支持简单的跨站点 GET 和 POST 请求。值得注意的是,这些浏览器会发送 ORIGIN 标头,该标头提供方案(http:// 或 https://)和发出跨站点请求的页面的域。服务器开发人员必须确保他们发回正确的标头,特别是有问题的 ORIGIN 的 Access-Control-Allow-Origin 标头(如果资源是公共的,则为所有域的“*”)。

CORS 标准通过添加新的 HTTP 标头来工作,这些标头允许服务器向允许的源域提供资源。浏览器支持这些标头并强制执行它们建立的限制。此外,对于可能对用户数据造成副作用的 HTTP 请求方法(特别是对于 GET 以外的 HTTP 方法,或者对于某些 MIME 类型的 POST 使用),规范要求浏览器“预检”请求,请求支持的方法使用 HTTP OPTIONS 请求标头从服务器发送,然后,在服务器“批准”后,使用实际的 HTTP 请求方法发送实际请求。服务器还可以通知客户端是否应随请求发送“凭据”(包括 Cookie 和 HTTP 身份验证数据)。

于 2011-06-08T11:21:19.803 回答