• Django CORS跨域资源共享


    1,什么是CORS

    ​   允许浏览器向跨源(协议 + 域名 + 端口)服务器发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制

    2,特点

    ​   1,浏览器自动完成(在请求头中加入特殊头 或 发送特殊请求)
    ​   2,服务器需要支持(响应头中需要有特殊头)

    3,简单请求(Simple requests)和预检请求(Preflighted requests)
      满足以下全部条件的请求为简单请求
      1,请求方法如下:
    ​        GET or HEAD or POST
      2,请求头仅包含如下:
    ​      Accept
    ​      Accept-Language
    ​      Content-Language
    ​      Content-Type
    ​    3,Content-Type 仅支持如下三种:
    ​       application/x-www-form-urlencoded
    ​       multipart/form-data
    ​       text/plain
    ​    不满足以上任意一点的请求都是 预检请求

    4,简单请求发送流程
      1,请求
    ​      请求头中 携带 Origin,该字段表明自己来自哪个域
      2,响应
    ​      如果请求头中的Origin在服务器接受范围内, 则返回如下头

    响应头作用备注
    Access-Control-Allow-Origin 服务器接受的域 必选
    Access-Control-Allow-Credentials 是否接受Cookie 可选
    Access-Control-Expose-Headers 默认情况下,xhr只能拿到如下响应头:Cache-Control,Content-Language,Content-Type,Expires,Last-Modified;如果有需要获取其他头,需在此指定 可选

      如果服务器不接受此域,则响应头中不包含 Access-Control-Allow-Origin

    5,预检请求发送流程

      与前述简单请求不同,“需预检的请求”要求必须首先使用 OPTIONS方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。"预检请求“的使用,可以避免跨域请求对服务器的用户数据产生未预期的影响。
      1,OPTIONS 请求发起,携带如下请求头

    请求头作用备注
    Origin 表明此请求来自哪个域 必选
    Access-Control-Request-Method 此次请求使用方法 必选
    Access-Control-Request-Headers 此次请求使用的头 必选


      2,OPTIONS 接受响应阶段,携带如下响应头

    响应头作用备注
    Access-Control-Allow-Origin 同简单请求 必选
    Access-Control-Allow-Methods 告诉浏览器,服务器接受得跨域请求方法 必选
    Access-Control-Allow-Headers 返回所有支持的头部,当request有 ‘Access-Control-Request-Headers’时,该响应头必然回复 必选
    Access-Control-Allow-Credentials 同简单请求 可选
    Access-Control-Max-Age OPTION请求缓存时间,单位s 可选


      3,主请求阶段 

    请求头作用备注
    Origin 表明此请求来自哪个域  必选

      

      4,主请求响应阶段  

    响应头作用备注
    Access-Control-Allow-Origin 当前服务器接受的域  必选

    6,Django支持
    django-cors-headers官网 https://pypi.org/project/django-cors-headers/

      1)官网下载 tar.gz结尾的安装包
      2)将源码包粘贴至虚拟机
      3)执行 tar -zxvf django-cors-headers-3.0.2.tar.gz 解压
      4) cd 到解压后的目录 cd django-cors-headers-3.0.2
      5) sudo python3 setup.py install 执行安装
      6)pip3 freeze|grep 'cors' 检查是否安装成功;若屏幕输出 django-cors-headers==3.0.2 则安装成功

     

    配置流程

      1,INSTALLED_APPS 中添加 corsheaders
      2,MIDDLEWARE 中添加 corsheaders.middleware.CorsMiddleware
             位置尽量靠前,官方建议 ‘django.middleware.common.CommonMiddleware’ 上方
      3,CORS_ORIGIN_ALLOW_ALL  布尔值  如果为True 白名单不启用
      4,CORS_ORIGIN_WHITELIST =[   白名单
            "https://example.com"
          ] 
       5, CORS_ALLOW_METHODS = (
            'DELETE',
            'GET',
            'OPTIONS',
            'PATCH',
            'POST',
            'PUT',
            )
        6, CORS_ALLOW_HEADERS = (
            'accept-encoding',
            'authorization',
            'content-type',
            'dnt',
            'origin''user-agent',
            'x-csrftoken',
            'x-requested-with',
             )
      7, CORS_PREFLIGHT_MAX_AGE  默认 86400s
      8, CORS_EXPOSE_HEADERS  []
      9, CORS_ALLOW_CREDENTIALS  布尔值, 默认False

      7、8、9项不用配置,全部采用默认值

  • 相关阅读:
    《你的灯还亮着吗》读后感1
    找"1"
    阅读计划---《梦断代码》3
    阅读计划---《梦断代码》2
    个人工作总结(10)
    个人工作总结(9)
    个人工作总结(8)
    个人工作总结(7)
    学习进度条
    个人工作总结(6)
  • 原文地址:https://www.cnblogs.com/hooo-1102/p/12055356.html
Copyright © 2020-2023  润新知