访问控制允许 Headers 不允许加载 iframe 的内容

Access Control Allow Headers not allowing contents of an iframe to load

我在同一目录中有两个 php 页面。这些是 edit_page.phppage.php.

edit_page.php 有一个所见即所得的编辑器,我可以在其中通过 iframe 编辑另一个页面的内容。 iframe 的来源是 page.php,带有查询 ?page_id=XXX.

当我转到 page.php?page_id=XXX 时,我可以看到以下 headers:

然而,当我转到 edit_page.php?page_id=XXX 时,我在控制台中看到以下错误:

我尝试将 headers 放在发送请求的页面中只是为了笑,即使我知道它正在发出请求而不是发送响应 header... 值得试一试 :P

我发送的 header 是:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: Content-Type");
header("X-Frame-Options: *"); 

我有点被这个问题困住了,我以前从未遇到过这种问题。如果有人能指出我正确的方向,将不胜感激。

此外,如果有人能首先解释为什么会发生这种情况,那就太好了。我的理解是,这会发生在来自交叉来源的页面上,例如从不在同一域中的外部源加载内容。但显然这两个文件不仅在同一个域,而且在同一个目录。

错误消息说 https://lifting365.com/EUR/beta/admin/page/ 已设置 X-Frame-Options: sameorigin

您似乎试图在 [=13] 上设置 X-Frame-Options: *(这不是 header 的有效值,请尝试 reading the documentation 以查看允许的值) =].

所以第一个问题是 你在错误的页面上设置了 headers

您要在框架中显示的页面需要授予权限。包含 <iframe> 元素的页面不需要授予自身包含 iframe 的权限!


你的第二个问题是你的基本方法是错误的。

您不应该试图降低安全限制,这样来自 https://lifting365.com 的页面可以显示在 http://lifting365.com` 上。您应该将所有 页面移动到 HTTPS。

这将:

  • 让他们更安全、更值得信赖
  • 放在同一个原点上(消除你问的问题)

Also if anyone can explain why this is happening in the first place that would be great.

使两个来源相同所需的因素之一是共享 URL 方案。 http:https: 不同。

好吧,现在我觉得自己很蠢....

我有:

<iframe name="richTextField" id="wysiwyg" src="page?page_id=1"></iframe>

而不是:

<iframe name="richTextField" id="wysiwyg" src="page.php?page_id=1"></iframe>

我想脑死了