尝试访问 iframe 内容(不同的子域);尝试设置 CORS

Posted

技术标签:

【中文标题】尝试访问 iframe 内容(不同的子域);尝试设置 CORS【英文标题】:Attempting to access iframe contents (different subdomain); tried setting up CORS 【发布时间】:2012-12-29 21:53:17 【问题描述】:

我在domain.com 托管一个文件,其中包含一个iframe,其文档托管在s3.domain.com。我正在尝试访问 iframe 的内容,但是收到以下内容:

不安全的 javascript 尝试从 URL http://domain.com/ 的框架访问 URL http://s3.domain.com.s3.amazonaws.com/file.html 的框架。域、协议和端口必须匹配。

我理解这样做的原因。我找到了两种解决方法。

    由于我拥有这两个文档,我可以将域属性设置为允许访问,如下所示:document.domain = 'domain.com'; 使用 CORS 允许访问托管在 S3 存储桶中的文档

我更愿意这样做,但是这样做有困难。 我的存储桶的 CORS 配置文件目前如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
    </CORSRule>
</CORSConfiguration>

但是,这仍然会导致错误。我确定我错过了什么,但不确定是什么。

任何建议将不胜感激。 谢谢。

【问题讨论】:

【参考方案1】:

使用 CORS 浏览器通常会执行预检请求(OPTIONS 方法)。可能您还必须允许所有标头以确保正确的预检请求处理:

<AllowedHeader>*</AllowedHeader>

另见here。

【讨论】:

运气不好。如果有帮助,这里是来自 iframe 内容的示例响应标头:cl.ly/image/3C2n2v3t3G37 看起来您根本没有收到 CORS 标头响应。至少应该有一个 Access-Control-Allow-Origin 标头。你确定它在 S3 中设置正确吗? 抱歉,我不知道为什么 S3 没有在您的配置中发出 CORS 标头。您可以尝试在亚马逊上询问。

以上是关于尝试访问 iframe 内容(不同的子域);尝试设置 CORS的主要内容,如果未能解决你的问题,请参考以下文章

从其他子域页面访问子域 iframe url

当域和协议匹配时获取 iframe 内容高度,但子域不匹配

在 iframe 父级中访问 div

在 iframe 父级中访问 div

不会加载以子域为目标的iframe。

js跨域访问