django解决frame拒绝问题
发生在,给出一个页面链接(来自django),为了访问友好,需要将页面通过iframe显示在app页面中。于是报出如下错误。
浏览器报错:
Refused to display 'http://192.168.1.113:8081/index/student/?problemid=1554177889' in a frame because it set 'X-Frame-Options' to 'DENY'.
发现在这个页面中request header中多出响应头X-Frame-Options DENY。 百度大概意思是,这属于一种跨域行为,这个响应头就是拒绝了这种行为。
解决办法:
1、全部页面修改
在setting.py中设置
X_FRAME_OPTIONS = 'ALLOWALL url' #这个是将值改变为可以响应 url指定地址
2、某一个views设置
from django.views.decorators.clickjacking import xframe_options_exempt # iframe拒绝问题
@xframe_options_exempt # 去掉这个view的响应头中的 X_FRAME_OPTIONS 解决frame 拒绝问题
class xxxx(View):
def get(self,request):
return render(request,'xxx/index_xxxx.html',{'data':xxx})
这个是去掉响应头中的该值
去看了这个装饰器的文件一共有三个方法
@xframe_options_deny #设置为deny
@xframe_options_sameorigin #设置为sameorigin
@xframe_options_exempt #去掉iframe限制,允许iframe访问某一个views
具体每一个什么作用就要区看X_FRAME_OPTIONS的东西了,但是为什么没有ALLOWALL呢?
百度了一下这三个值的意思
deny : 不允许在frame中展示
sameorigin : 允许在通域名的frame中展示
ALLOWALL : 在指定地址的frame中可以展示 所以后边应该还有个url