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

文章目录