如果我像这样创建一个iframe:
var dialog = $('<div id="' + dialogId + '" align="center"><iframe id="' + frameId + '" src="' + url + '" width="100%" frameborder="0" height="'+frameHeightForIe8+'" data-ssotoken="' + token + '"></iframe></div>').dialog({
我如何修复这个错误:
拒绝在帧中显示“https://www.google.com.ua/?gws_rd=ssl”,因为它将“X-Frame-Options”设置为“SAMEORIGIN”。
使用JavaScript ?
如果你控制发送iframe内容的服务器,你可以在你的web服务器中设置X-Frame-Options。
配置Apache
要为所有页面发送X-Frame-Options报头,请将其添加到站点的配置中:
Header always append X-Frame-Options SAMEORIGIN
Configuring nginx
要配置nginx发送X-Frame-Options报头,将其添加到http、服务器或位置配置中:
add_header X-Frame-Options SAMEORIGIN;
没有配置
这个头选项是可选的,所以如果这个选项根本没有设置,你将给下一个实例配置这个选项(例如访问者浏览器或代理)
来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
X-Frame-Options HTTP响应报头可用于指示浏览器是否应允许在<frame>, <iframe>或<object>中呈现页面。网站可以通过确保他们的内容没有嵌入到其他网站来避免点击劫持攻击。
欲了解更多信息:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
对于这个问题,我有一个替代的解决方案,我将使用PHP演示:
iframe.php:
<iframe src="target_url.php" width="925" height="2400" frameborder="0" ></iframe>
target_url.php:
<?php
echo file_get_contents("http://www.example.com");
?>
(我重新提出这个答案是因为我想分享我为解决这个问题而创建的变通方法)
如果您无法访问在<iframe>元素中托管您想要服务的网页的网站,您可以通过使用启用cors的反向代理来绕过X-Frame-Options SAMEORIGIN限制,该反向代理可以从web服务器(上游)请求web页面并将它们提供给最终用户。
下面是这个概念的可视化图表:
由于我对我发现的CORS代理不满意,我最终自己创建了一个,我称之为CORSflare:它被设计为在Cloudflare Worker(无服务器计算)中运行,因此它是一个100%免费的解决方案-只要你不需要它每天接受超过100,000个请求。
你可以在GitHub上找到代理源代码;完整的文档,包括安装说明,可以在我博客的这篇文章中找到。