为什么iframe不适用于yahoo.com

时间:2013-05-18 13:42:06

标签: php html iframe frames x-frame-options

我发现这不起作用:

<iframe src="http://www.yahoo.com"> </iframe>

我已阅读此question,但我不明白添加内容的含义:

<?php
header('X-Frame-Options: GOFORIT'); 
?>

我尝试将此添加到我的html文件的顶部(当然,将其更改为php文件),我的php文件变为:

<?php
header('X-Frame-Options: GOFORIT'); 
?>
<iframe src="http://www.yahoo.com"> </iframe>

我在我的appserv(使用php 5.2.6)中运行它,它不起作用。任何人都可以解释我应该做些什么来克服这个问题吗?

4 个答案:

答案 0 :(得分:5)

你运气不好:yahoo.com不允许你将他们的网站嵌入到iframe中。 Facebook或其他热门网站也不是。

此限制的原因是clickjacking

您可以通过检查其网站的响应标头来验证这一点;他们指定X-Frame-Options:SAMEORIGIN,这意味着只有yahoo.com才能嵌入yahoo.com页面。

某些较旧的浏览器不会强制执行标题,但所有新标题都会强制执行。 Afaik,没有简单的方法。

我能想到的唯一解决方案是实现代理脚本,即您在服务器上嵌入了一个脚本,可以为您提取远程内容。

EG。您的iframe调用“/my-proxy.php?url=http://www.yahoo.com/”,该脚本将如下所示:

<?php

header('X-Frame-Options: SAMEORIGIN'); // don't allow other sites to use my proxy
echo file_get_contents($_GET['url']);

您的里程可能会有所不同......

答案 1 :(得分:2)

您遇到跨域资源共享问题。阅读这些Wikipedia CORSMDN CORS条款。

至于你的代码段,

<?php
  header('X-Frame-Options: GOFORIT'); 
?>

需要添加到正在投放的网页,而不是添加到请求它的网页/代码,在这种情况下会yahoo.com。但是,由于您没有自己提供yahoo.com,因此无法添加它。

然而如果问题与您自己的网页有关,yahoo.com只是一个示例,您只需设置文章中指定的正确HTTP标头,就可以了。

答案 2 :(得分:0)

google,yahoo等网站已停用其网站的iframe嵌入功能。如果你想这样做,那么在服务器端使用curl或file_get_conents抓取他们的html并显示它。

检查HTTP响应标头X-Frame-Option。我认为雅虎它应该是deny或sameorigin,这意味着只有雅虎页面可以将其他页面嵌入iframe

答案 3 :(得分:-1)

在google chorme中添加'忽略X-Frame标题'插件,然后工作正常。