• django+redis前后端分离项目


    1. 跨域

    跨域:出于浏览器的同源策略限制,协议(protocol),主机(host)和端口号(port)有任一不同时,就会出现跨域问题
    跨域请求分类(简单请求,复杂请求):
      简单请求(同时满足以下三个条件)
        1. 请求方式必须为get,head,post
        2. 请求头仅包含:accept,accept-language,content-language,content-type
        3. content-type仅支持以下三种:application/x-www-form-urlencoded,multipart/form-data,text/plain
      复杂请求:
        不是简单请求的请求

    简单请求的流程:
      简单请求的请求头中会自带origin,表名自己来自于哪个域
      响应会带有access-control-allow-origin的响应头,表名后端接收的域
    复杂请求(预检请求)的流程:
      1. 先发一个options请求,携带origin,access-control-request-method,access-control-request-headers请求头
      2. 服务器处理请求,返回access-control-allow-origin,
    access-control-request-method,access-control-request-headers响应头
      3. 浏览器再次发送真实请求
      备注:预检请求会发送两次请求,会增大服务器的压力,所以在options预检请求的时候,服务器会返回一个access-control-max-age的响应头,
        返回一个有效时间(一般一天),浏览器在有效期期间再次请求时不必再发options请求,直接发送真实请求即可。
    
    解决方法
    1. jsonp
    只能发送get请求,不使用
    2. cors
    跨域资源共享
    3. nginx反向代理


    2. django的cors解决跨域

    1. installed_app中添加corsheaders
    2. middleware中添加'corsheaders.middleware.CorsMiddleware'
        位置尽量靠前,官方建议放在'django.middleware.common.CommonMiddleware'之前
    3. CORS_ORIGIN_ALLOW_ALL值为True时,白名单不启用,所有域名均可访问
    4. CORS_ORIGIN_WHITELIST 白名单启用,是个列表或元组
    5. CORS_ALLOW_METHODS 允许的请求方式
    6. CORS_PREFLIGHT_MAX_AGE 在多少时间内,不用预检请求,默认86400s,即一天
    CORS_ALLOW_METHODS = (
        'DELETE',
        'GET',
        'OPTIONS',
        'PATCH',
        'POST',
        'PUT',
        'VIEW',
    )
    
    CORS_ALLOW_HEADERS = (
        'accept',
        'accept-encoding',
        'authorization',
        'content-type',
        'dnt',
        'origin',
        'user-agent',
        'x-csrftoken',
        'x-requested-with',
    )
  • 相关阅读:
    AlphaToCoverage solution
    PhyreEngine3.8 MSAA resolution
    渲染错误
    tomcat
    Jupyter
    Flask
    Highcharts20151130
    CodeMirror
    响应式
    import
  • 原文地址:https://www.cnblogs.com/JackShi/p/15057136.html
Copyright © 2020-2023  润新知