如何启用 CORS

Posted

技术标签:

【中文标题】如何启用 CORS【英文标题】:How to enable CORS 【发布时间】:2014-01-19 11:48:55 【问题描述】:

我有两个站点:本地:20279/ 和本地:54220。 54220 从 20279 开始通过 IFrame 打开。用户单击按钮后,IFrame 将关闭,我在 52220 中获取数据。我阅读了,这就是我在 web.config 中所做的:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*"/>
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
            <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

文件js中的这段代码用来读取IFrame里面的数据

function dialog_close() 
    dialog(false, '');

    getValueFromIFrame("if-dialog", "status");


function getValueFromIFrame(idIFrame, idField) 
    var iframe = document.getElementById(idIFrame);
    var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
    var value = innerDoc.getElementById(idField).value;
    alert(value);
    //return value;

这是我从浏览器得到的:

Blocked a frame with origin 20279 from accessing a frame with origin "http://localhost:54220". Protocols, domains, and ports must match. <br/>
Uncaught SecurityError: Blocked a frame with origin "http://localhost:20279" from accessing a frame with origin 54220. Protocols, domains, and ports must match.

我的问题是:如何让它发挥作用?

谢谢

【问题讨论】:

您的问题与CORS无关。您需要阅读网络消息 API,因为您需要利用它与不同来源的 iframe 进行通信。 @RayNicholus:它有效。谢谢你的帮助。您可以发布一个我可以标记的答案吗? 如果你有一个可行的解决方案,你应该发布代码作为答案。 【参考方案1】:

您的响应中的 Access-Control-Allow-Origin 标头必须设置为在 HTTP 请求的 Origin 标头中发送的确切值,* 是不够的。

【讨论】:

1.) 通常,“*”是完全可以的。仅当跨域请求是凭据请求时,您的陈述才是正确的。 2.) 这个问题不涉及 CORS。 OP对此有误。

以上是关于如何启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章

如何在 FastAPI 中启用 CORS?

Wagtail、CORS 和 Django-Cors-Headers。如何启用 CORS 以便 AXIOS 可以访问端点

如何在 odata 中启用 CORS?

如何在 Sharepoint Online 中启用 CORS

如何在 GKE 中通过入口启用 Cors

如何启用 CORS