• Django 报错 Refused to display 'http://127.0.0.1:8000/ in a frame because it set 'X-Frame-Option


    Django的X-Frame-Options设置
    事件起因
    事件的起因是这样的,我在使用Django服务的时候,想在一个已经存在某个按钮的主页面上,单击这个按钮弹出某个功能页面,设置某些内容,然后再退回到主页面。
    我使用了某个插件,在弹出的页面上显示我请求的链接被服务器拒绝。
    在使用浏览器调试的console页面中有如下的提示信息:Refused to display '页面url' in a frame because it set 'X-Frame-Options' to 'deny'.
    那么就知道是是X-Frame-Options设置出了问题。

    1. 有关X-Frame-Options
      2.1 什么是X-Frame-Options
      X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 , 或者

    2.2 X-Frame-Options选项
    X-Frame-Options 有三个值:

    DENY :表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许
    SAMEORIGIN :表示该页面可以在相同域名页面的 frame 中展示
    ALLOW-FROM uri :表示该页面可以在指定来源的 frame 中展示
    换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。
    另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

    3.Django有关配置
    3.1 Django默认的配置
    首先,Django起禁止X-Frame-Options,使用默认设置了相关的配置。
    在项目的setting.py页面中能够找到如下的设置:

    MIDDLEWARE = [
    ...
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ...
    ]

    上面的内容显示,Django的项目中默认设置了XFrameOptionsMiddleware的中间件,这个设置将对于X-Frame-Options的配置设置成了DENY。
    在Django 3.0中,X_FRAME_OPTIONS的默认设置从SAMEORIGIN 变成了DENY。

    3.2 Django总体配置
    想要总体设置项目的X-Frame-Options可以使用如下的代码:

    X_FRAME_OPTIONS = 'SAMEORIGIN'
    1
    可以看出上面的是将X_FRAME_OPTIONS设置成SAMEORIGIN,但是这个改变了整个项目的设置,往往只有某些页面才需要这样的设置,因此下面介绍在单独的页面上设置这些内容。

    3.3 指定的网页配置
    直接看代码:

    from django.http import HttpResponse
    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 view_one(request):
    return HttpResponse("This page is safe to load in a frame on any site.")

    @xframe_options_deny
    def view_two(request):
    return HttpResponse("I won't display in any frame!")

    @xframe_options_sameorigin
    def view_three(request):
    return HttpResponse("Display in a frame if it's from the same origin as me.")

    从上面的相应和名称能够很容易看出分别的含义,不在更详细描述。
    装载来源:https://blog.csdn.net/u010403700/article/details/82112917

  • 相关阅读:
    Linux就该这么学——新手必须掌握的命令之文件目录管理命令组
    Linux就该这么学——新手必须掌握的命令之文件编辑命令组
    Linux就该这么学——新手必须掌握的命令之工作目录切换命令组
    Linux就该这么学——新手必须掌握的命令之系统状态检测命令组
    Linux就该这么学——新手必须掌握的命令之常用的系统工作命令
    Linux就该这么学——新手必须掌握的命令之我的第一个命令
    Linux就该这么学——安装配置VM虚拟机
    thinkphp6下无法获取header头中的Authorization(apache版)
    字符串转数组(php版)
    python3 第二十二章
  • 原文地址:https://www.cnblogs.com/lph970417/p/12896689.html
Copyright © 2020-2023  润新知