Django报错:Refused to display 'http://127.0.0.1:8000/' in a frame because it set 'X-Frame-Options' to 'deny'.
报错
Django3.x富文本kindeditor图片上传时图片不能加载显示到编辑器的输入框中,console中报错:Refused to display 'http://127.0.0.1:8000/' in a frame because it set 'X-Frame-Options' to 'deny'.
报错原因
X-Frame-Options 设置出了问题
X-Frame-Options HTTP响应头可用于指示是否允许浏览器在frame、iframe、embed 或者 object中呈现页面。网站可以使用它来避免点击劫持(click-jacking )攻击,方法是确保其内容不会嵌入到其他网站中。
X-Frame-Options有三个选项值:
- DENY :表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许
- SAMEORIGIN :表示该页面可以在相同域名页面的 frame 中展示
- ALLOW-FROM uri:表示该页面可以在指定来源的 frame 中展示 (该指令已被弃用,不再适用于现代浏览器)
在Django 3.0中,X_FRAME_OPTIONS的默认设置从SAMEORIGIN 变成了DENY。
出现问题的原因在setting中的中间件,Django的项目中默认设置了XFrameOptionsMiddleware的中间件,这个设置将对于X-Frame-Options的配置设置成了DENY:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
解决方法
-
注释掉上面中间件(不推荐,容易出现中间人攻击)
-
使用装饰器(推荐,在单独的页面上设置)
# 引入 from django.views.decorators.clickjacking import xframe_options_exempt from django.views.decorators.clickjacking import xframe_options_deny from django.views.decorators.clickjacking import xframe_options_sameorigin @xframe_options_exempt def func1(request): @xframe_options_deny def fun2(request): @xframe_options_sameorigin def fun3(request):
-
在setting中配置(同1,在总体项目设置)
X_FRAME_OPTIONS = 'SAMEORIGIN'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能