How to set 'X-Frame-Options' on 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?
您不能在
快速检查标题(在Chrome开发者工具中显示在此处)中,就会发现主机返回的
该网站设置了此标头,以使其不允许显示在
进一步阅读X-Frame-Options
如果您控制发送iframe内容的服务器,则可以在Web服务器中设置
配置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响应标头可用于指示是否应允许浏览器呈现
想要查询更多的信息:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Frame-Options
我有一个替代解决方案,我将使用PHP进行演示:
iframe.php:
1 | <iframe src="target_url.php" width="925" height="2400" frameborder="0"></iframe> |
target_url.php:
1 2 3 | <?php echo file_get_contents("http://www.example.com"); ?> |
您可以像这样在iframe中加载要在网站的网站配置中设置x-frame-option
1 2 3 4 5 | <httpProtocol> <customHeaders> </customHeaders> </httpProtocol> |
解决方案是安装浏览器插件。
发出HTTP标头
请注意,出于安全考虑,完全不建议这样做。
为此,您需要匹配您的apache或您正在使用的任何其他服务中的位置
如果您正在使用apache,则在httpd.conf文件中。
1 2 3 4 | <LocationMatch"/your_relative_path"> ProxyPass absolute_path_of_your_application/your_relative_path ProxyPassReverse absolute_path_of_your_application/your_relative_path </LocationMatch> |
您无法真正在HTML正文中添加x-iframe,因为它必须由网站所有者提供,并且位于服务器规则之内。
您可能可以做的是创建一个PHP文件,该文件加载目标URL和该PHP URL的iframe的内容,这应该可以顺利进行。
如果您遵循xml方法,则下面的代码将起作用。
1 2 3 4 5 6 7 | <security:headers> <security:frame-options /> <security:cache-control /> <security:content-type-options /> <security:xss-protection /> </security:headers> <security:http> |
您可以在tomcat实例级别的配置文件(web.xml)中进行操作
需要在web.xml配置文件中添加"过滤器"和"过滤器映射"。
由于这是全局设置,因此会在所有页面中添加[X-frame-options = DENY]。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> true</async-supported> <init-param> <param-name>antiClickJackingEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>antiClickJackingOption</param-name> <param-value>DENY</param-value> </init-param> </filter> <filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |