如果我像这样创建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&#39;到&#39; SAMEORIGIN&#39;。
使用JavaScript?
答案 0 :(得分:167)
您无法在X-Frame-Options
上设置iframe
。这是您请求资源的域设置的响应标头(示例中为google.com.ua
)。在这种情况下,他们已将标头设置为SAMEORIGIN
,这意味着他们已禁止在其域外的iframe
中加载资源。有关更多信息,请参阅MDN上的The X-Frame-Options response header。
快速检查标题(在Chrome开发人员工具中显示)会显示主机返回的X-Frame-Options
值。
答案 1 :(得分:56)
你似乎误解了这个问题。 X-Frame-Options
是响应中包含的标头,如果请求的域允许自己在帧中显示,则表明请求。它与javascript或HTML无关,也不能被请求的发起者更改。
此网站设置此标题以禁止它显示在iframe
中。你无能为力阻止这种行为。
答案 2 :(得分:24)
如果您控制发送iframe内容的服务器,则可以在网络服务器中设置X-Frame-Options
的设置。
要为所有网页发送X-Frame-Options标头,请将其添加到您网站的配置中:
Header always append X-Frame-Options SAMEORIGIN
要配置nginx以发送X-Frame-Options标头,请将其添加到您的http,服务器或位置配置中:
add_header X-Frame-Options SAMEORIGIN;
此标题选项是可选的,因此如果根本没有设置该选项,您可以选择将其配置为下一个实例(例如访问者浏览器或代理)
来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
答案 3 :(得分:5)
不是......我用了
<system.webServer>
<httpProtocol allowKeepAlive="true" >
<customHeaders>
<add name="X-Frame-Options" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
答案 4 :(得分:4)
由于服务器端并未真正提及该解决方案:
必须设置这样的内容(例如,来自Apache的示例),这并不是最好的选择,因为它允许所有操作,但是在看到服务器正常工作后,您可以轻松地更改设置。
Header set Access-Control-Allow-Origin "*"
Header set X-Frame-Options "allow-from *"
答案 5 :(得分:2)
我的virtualmin服务器(apache)在子目录中的wordpress上遇到了同样的问题,上述答案都没有解决我案例中的问题,仍然在控制台上收到x-frame-options denied错误消息,直到我尝试将以下行添加到.htaccess
(wordpress root)目录中的public_html\subdirectory\
文件中:
header always set x-frame-options "SAMEORIGIN"
这是我案件中唯一可行的解决方案。 (请注意,有一部分包含always set
而不是append
或always append
)
答案 6 :(得分:2)
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");
?>
答案 7 :(得分:1)
解决方案是安装浏览器插件。
发布值为X-Frame-Options
(或DENY
且服务器来源不同)的HTTP标头SAMEORIGIN
的网站无法集成到IFRAME中...除非您更改此内容通过安装忽略X-Frame-Options
标题的浏览器插件(例如Chrome's Ignore X-Frame Headers)的行为。
请注意,出于安全原因,根本不建议这样做。
答案 8 :(得分:1)
您无法真正在网站正文中添加x-iframe,因为它必须由网站所有者提供,并且位于服务器规则之内。
您可能可以做的是创建一个PHP文件,该文件加载目标URL和该php URL的iframe的内容,这应该可以顺利进行。
答案 9 :(得分:1)
如果没有任何帮助,而您仍想在iframe中展示该网站,请考虑使用X Frame Bypass Component,它将利用代理。
答案 10 :(得分:1)
这也是一种新的浏览器安全功能,可以防止网络钓鱼和其他安全威胁。对于chrome,您可以下载扩展程序以防止浏览器拒绝该请求。 我在本地使用WordPress时遇到此问题。
我使用此扩展名https://chrome.google.com/webstore/detail/ignore-x-frame-headers/gleekbfjekiniecknbkamfmkohkpodhe
答案 11 :(得分:0)
你可以在你想要加载iframe的网站的web配置中设置x-frame-option
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="*" />
</customHeaders>
</httpProtocol>
答案 12 :(得分:0)
为此,您需要匹配您的apache中的位置或您正在使用的任何其他服务
如果您正在httpd.conf文件中使用apache。
<LocationMatch "/your_relative_path">
ProxyPass absolute_path_of_your_application/your_relative_path
ProxyPassReverse absolute_path_of_your_application/your_relative_path
</LocationMatch>
答案 13 :(得分:0)
尝试
response['X-Frame-Options'] = 'ALLOWALL'
或
response['X-Frame-Options'] = 'ALLOW-FROM http://yourdomain.com'
示例
class ExampleView(generic.View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(ExampleView, self).dispatch(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
res = api_request('get', 'example/xyx')
response = HttpResponse(res)
return self.set_response_header(request, response)
def options(self, request, *args, **kwargs):
response = HttpResponse()
return self.set_response_header(request, response)
def set_response_header(self, request, response):
response['Access-Control-Allow-Origin'] = request.META.get('HTTP_ORIGIN') if request.META.get('HTTP_ORIGIN') else '*'
response['Access-Control-Allow-Headers'] = 'x-requested-with, content-type, accept, origin, authorization, x-csrftoken, user-agent, accept-encoding, cache-control'
response['Access-Control-Allow-Methods'] = 'GET, POST, PUT, PATCH, DELETE, OPTIONS'
response['Access-Control-Max-Age'] = '86400'
response['Access-Control-Allow-Credentials'] = 'true'
response['X-Frame-Options'] = 'ALLOWALL'
return response
答案 14 :(得分:0)
您可以在tomcat实例级别的配置文件(web.xml)中进行操作 需要在web.xml配置文件中添加“过滤器”和“过滤器映射”。 这是全局设置,因此会在所有页面中添加[X-frame-options = DENY]。
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>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>
答案 15 :(得分:0)
(由于我想分享我为解决此问题而创建的变通方法,因此我正在恢复此答案)
如果您无权访问要在<iframe>
元素中提供服务的网页所在的网站,则可以使用启用了CORS的反向代理来规避X-Frame-Options
SAMEORIGIN限制可以从Web服务器(上游)请求网页并将其提供给最终用户。
以下是该概念的直观图表:
由于我对发现的CORS代理感到不满意,所以最终我自己创建了一个我称为 CORSflare 的计算机:该计算机旨在运行在Cloudflare Worker(无服务器计算)中,因此这是100%免费的解决方法-只要您不需要每天接受超过100.000个请求即可。
答案 16 :(得分:-2)
如果您遵循xml方法,则下面的代码将起作用。
<security:headers>
<security:frame-options />
<security:cache-control />
<security:content-type-options />
<security:xss-protection />
</security:headers>
<security:http>