如何在Django中删除Xframe选项头?

14
我创建了一个页面,其中包含iframe。在iframe内部,我想显示多个不同的链接,如来自Facebook的文章、新闻、YouTube视频或任何其他可能的URL。但是,由于Xframe标头,我无法这样做。我参考了以下链接:https://docs.djangoproject.com/en/1.8/ref/clickjacking/Django XFrameOptionsMiddleware (X-Frame-Options) - allow iframe by client IP,但没有得到任何帮助。
我的settings.py文件中的MIDDLEWARE_CLASSES是:
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
http://django-secure.readthedocs.org/en/latest/middleware.html了解到,使用装饰器@frame_deny_exempt可以解决我的问题。但是,在Chrome控制台中仍然会出现相同的错误,即: Refused to display '<URL>' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN, SAMEORIGIN'. 有任何帮助吗?
3个回答

9

在settings.py中的MIDDLEWARE列表中移除django.middleware.clickjacking.XFrameOptionsMiddleware


1
非常感谢!NGINX和Django都发送了DENY,所以头部是X-Frame-Options DENY, DENY... - VivienG

4

我有几个Django网站,有人想要在iframe中展示它们。由于"x-frame-options"标头的值始终为SAMEORIGIN,这是不可能的。无论我做什么,都无法删除"x-frame-options"标头的值。

所以最后我决定采用最后的解决方案,即修改httpd.conf文件。我添加了以下行:

  Header always set X-Frame-Options ALLOWALL

然后它就可以在iframe中显示了。


3
如果我理解正确的话,您这里有些地方是错误的。 X-Frame-Options 是关于浏览器遵循您的标头,确定是否允许在 iframe 中使用您的网站,而不是允许第三方网站在您的 iframe 中使用。
同样的,这也适用于其他网站的标头。例如,Facebook已经将上述标头设置为DENY,因此任何遵循这个标头的浏览器都不会允许您的网站呈现在 Facebook 的 iframe 之中,而不管您的网站的标头是什么。

1
你说得对。非常感谢您澄清我的问题... :) - amulya349

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接