• Django内置的中间件


    内置中间件

    1. django.middleware.gzip.GZipMiddleware:相应数据进行压缩。如果内容长度少于200个长度,那么就不会压缩。
    在settings.py文件中配置MIDDLEWARE,添加:django.middleware.gzip.GZipMiddleware中间件,
    
    之后,在浏览器中访问网页,查看Response Headers中的Content-Length与没有开启GZip中间件之前的Content-Length对比。就可以看出源代码在加载的时候确实是被压缩了。但是如果访问的网页的内容少于200个字符,就不会被压缩。
    2.django.contrib.messages.middleware.MessageMiddleware:消息处理相关的中间件。
    这个与我们之前涉及到的messages的上下文处理器非常相似,都是为了在多个模板中可以使用我们返回给模板的变量,并且简化操作。
    3.django.contrib.auth.middleware.AuthenticationMiddleware:会给request添加一个user对象的中间件。
    用户的授权中间件,该中间件必须在sessionmiddleware后面。
    4.django.middleware.csrf.CsrfViewMiddleware:CSRF保护的中间件。
    SessionMiddleware必须出现在CsrfMiddleware之前。
    5.django.middleware.clickjacking.XFrameOptionsMiddleware:做了clickjacking攻击的保护。
    clickjacking保护是攻击者在自己的病毒网站上,写一个诱惑用户点击的按钮,然后使用iframe的方式将受攻击的网站(比如银行的网站)加载到自己的网站上去,并将其设置为透明的,用户就看不到了,然后再把受攻击的网站(比如银行网站)的转账按钮定位到病毒网站的按钮上,这样用户在点击病毒网站上的按钮的时候,实际上点击的是受攻击的网站(比如银行的网站)上的按钮,从而实现了在不知不觉中给攻击者转账的功能。
    该中间件的作用就是为http请求的response设置一个http的请求头,如果这个response中包含xframe_options_exempt=True,就不要再设置X-Frame-Options了。如果设置X-Frame-Options为SAMEORIGIN,这就意味着该response可以被本网站的加载为一个frame,而不能被其它网站的加载为一个frame。在你的项目的settings.py中开启这个中间件,就会在你的django项目中设置X-Frame-Options为DENY。
    6.django.middleware.security.SecurityMiddleware:做了一些安全处理的中间件。比如设置XSS防御的请求头,比如做了http协议转为https协议的工作等。
    7.django.contrib.sessions.middleware.SessionMiddleware:session中间件。会给request添加一个处理好的session对象。
    8.缓存中间件:用来缓存一些页面
    (1)django.middleware.cache.UpdateCacheMiddleware.
    (2)django.middleware.cache.FetchFromCacheMiddleware

    内置中间件防止的顺序:

    1.SecurityMiddleware:应该放到最前面。因为这个中间件并不需要依赖任何其他的中间件。如果你的网站同时支持http协议和https协议,并且你想让用户在使用http协议的时候重定向到https协议,那么就没有必要让他执行下面的中间件再重定向,这样效率更高。
    2.UpdateCacheMiddleware:应该在GZipMiddleware,SessionMiddleware,LocalMiddleware之前。
    3.GZipMiddleware。
    4.ConditionalMiddleware。
    5.SessionMiddleware。
    6.LocaleMiddleware。
    7.CommonMiddleware。
    8.CsrfViewMiddleware。
    9.AuthenticationMiddleware。
    10.MessageMiddleware。
    11.FetchFromCacheMiddleware。
    12.FloatpageFallbackMiddleware。
    13.RedirectFallbackMiddleware。

    各个中间件的路径

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.middleware.cache.UpdateCacheMiddleware',
        'django.middleware.gzip.GZipMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.locale.LocaleMiddleware'
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.cache.FetchFromCacheMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        <!--以下两个中间件在settings文件中配置时,会出现:RuntimeError: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.-->
        <!--'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',-->
        <!--'django.contrib.redirects.middleware.RedirectFallbackMiddleware',-->
    ]
    
    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    记一次Postgres CPU爆满故障
    Bug 28450914 : ORA-600: [KDLRCI_GET_INLINE_DATA] SELECTING FROM CDB_FEATURE_USAGE_STATISTICS
    获取数据表中列的描述值
    【自考】数据结构第四章树和二叉树,期末不挂科指南,第6篇
    SqlServer视图查询效率测试
    MySQL中使用group by 是总是出现1055的错误
    redis中key键操作
    SQL Server等待事件&mdash;PAGEIOLATCH_EX
    MySQL 什么是索引?
    计算经历的时间
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12354718.html
Copyright © 2020-2023  润新知