关于javascript:如何在iframe上设置“ X-Frame-Options”?

How to set 'X-Frame-Options' on iframe?

如果创建这样的iframe

1
var dialog = $('<iframe id="' + frameId + '" src="' + url + '" width="100%" frameborder="0" height="'+frameHeightForIe8+'" data-ssotoken="' + token + '"></iframe>').dialog({

我该如何解决错误:

Refused to display 'https://www.google.com.ua/?gws_rd=ssl' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

使用JavaScript?


您不能在iframe上设置X-Frame-Options。这是由您从中请求资源的域(示例中为google.com.ua)设置的响应标头。在这种情况下,他们已将标头设置为SAMEORIGIN,这意味着他们不允许在其域外的iframe中加载资源。有关更多信息,请参见MDN上的X-Frame-Options响应标头。

快速检查标题(在Chrome开发者工具中显示在此处)中,就会发现主机返回的X-Frame-Options值。

enter image description here


X-Frame-Options是包含在对请求的响应中的标头,以声明所请求的域是否将允许其自身显示在帧中。它与javascript或HTML无关,并且不能由请求的发起者更改。

该网站设置了此标头,以使其不允许显示在iframe中。客户无法采取任何行动来阻止这种行为。

进一步阅读X-Frame-Options


如果您控制发送iframe内容的服务器,则可以在Web服务器中设置X-Frame-Options的设置。

配置Apache

要发送所有页面的X-Frame-Options标头,请将其添加到网站的配置中:

1
Header always append X-Frame-Options SAMEORIGIN

配置nginx

要将nginx配置为发送X-Frame-Options标头,请将其添加到http,服务器或位置配置中:

1
add_header X-Frame-Options SAMEORIGIN;

没有配置

此标头选项是可选的,因此,如果根本没有设置该选项,则可以选择将该选项配置为下一个实例(例如,访客浏览器或代理)

来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options


由于服务器端并未真正提及该解决方案:

必须设置这样的内容(例如来自apache的内容),这并不是最好的选择,因为它允许所有操作,但是在看到服务器正常工作后,您可以轻松更改设置。

1
2
           Header set Access-Control-Allow-Origin"*"
           Header set X-Frame-Options"allow-from *"

如果没有任何帮助,而您仍想在iframe中展示该网站,请考虑使用X帧绕过组件,该组件将使用代理。


不是真的...我曾经

1
2
3
4
5
6
7
 <system.webServer>
     <httpProtocol allowKeepAlive="true">
       <customHeaders>
         
       </customHeaders>
     </httpProtocol>
 </system.webServer>


X-Frame-Options HTTP响应标头可用于指示是否应允许浏览器呈现