2

我正在开发一个简单的功能,允许我的合作伙伴(其他网站)将我们的内容嵌入到 iframe 中的他们的网站上。

我正在测试,奇怪的是有些页面是允许的,有些是不允许的。

例如:

<iframe frameborder="0" height="500" width="900" src="https://www.mywebsite.com"></iframe>

抛出控制台错误:

Load denied by X-Frame-Options: https://www.mywebsite.com/ does not permit cross-origin framing.

而这:

<iframe frameborder="0" height="500" width="900" src="https://www.mywebsite.com/experience/"></iframe>

渲染没有问题。

可能是什么问题?

我可以明确允许从外部源在 iframe 中呈现我的内容吗?怎么做?

编辑

我的 web.config 现在看起来像这样:

<httpProtocol>
  <customHeaders>
    <remove name="X-Powered-By" />
  <add name="Cache-Control" value="public" />
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>

但它仍然不起作用,例如。它不允许查看 iframe 内容。

我检查了网络响应并注意到两个iframe请求中的标头设置正确:

access-control-allow-origin *

但是在第一个 iframe 请求中,我还得到了这个:

x-frame-options SAMEORIGIN

而在第二个(经验)x-frame-options根本没有设置。

将此添加到web.config

<add name="X-Frame-Options" value="ALLOW-FROM *" />

两个 iframe 都返回关于不允许跨域的控制台错误,在第二种情况下

x-frame-options SAMEORIGIN

没有被删除,只是:

x-frame-options ALLOW-FROM *

被额外添加。

编辑 2

我试图删除 web.config 中的 x-frame-options 并确保它没有在 IIS 上为该站点设置,但是当我获取 url 时它仍然存在:

<httpProtocol>
  <customHeaders>
    <remove name="X-Powered-By" />
    <remove name="X-Frame-Options" />
    <add name="Cache-Control" value="public" />
    <add name="Access-Control-Allow-Origin" value="*" />
    <!--<add name="X-Frame-Options" value="ALLOWALL" />-->
  </customHeaders>
</httpProtocol>

在此处输入图像描述

正如您在上面看到的那样,我一直在尝试添加x-frame-options ALLOWALL(我当时评论了它)但它没有删除x-frame-options SAMEORIGIN

4

1 回答 1

-1

您可以配置您的服务器以提供正确的 http 标头以允许 CORS。这将解决您的问题。有关更多信息,请参见此处:https ://enable-cors.org/server.html

CORS 的工作方式是验证您尝试使用的两个域或子域(即您的站点 + https://www.mywebsite.com)是否允许一起使用。如果不是这种情况,您可能会遭受攻击,即您的网上银行托管在 iframe 中但被父内容等包裹,这将导致用户信任度低。

通常,当您配置 CORS 时,您会在此处看到本文中提到的标头:https ://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Access-Control-Allow-Origin ,其中添加了:

Access-Control-Allow-Origin: *

星号允许所有其他网站将该内容包装在 iframe 等中,但您可以使用特定域名,以便只有您的网站可以嵌入该内容。

于 2019-05-24T01:04:38.680 回答