• django-跨域访问


    同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

    同源策略限制以下几种行为: 1.) Cookie、LocalStorage 和 IndexDB 无法读取 2.) DOM 和 Js对象无法获得 3.) AJAX 请求不能发送

     
    #处理方法:
    # 1.通过JSONP跨域
    # JSON是一种数据交换格式
    # JSONP是一种非官方的跨域数据交互协议
    # jsonp是包含在函数调用中的json
    # script标签不受同源策略的影响,手动创建一个script标签,传递URL,同时传入一个回调函数的名字
    # 服务器得到名字后,返回数据时会用这个函数名来包裹住数据,客户端获取到数据之后,立即把script标签删掉
    # 2.cors:跨域资源共享
    # 使用自定义的HTTP头部允许浏览器和服务器相互通信
    # 1.如果是简单请求,直接设置允许访问的域名:
    # 允许你的域名来获取我的数据                         
    # response['Access-Control-Allow-Origin'] = "*"
    # 2.如果是复杂请求,首先会发送options请求做预检,然后再发送真正的PUT/POST....请求
    # 因此如果复杂请求是PUT等请求,则服务端需要设置允许某请求
    # 如果复杂请求设置了请求头,则服务端需要设置允许某请求头
    #简单请求:
    # 一次请求 
    #非简单请求:
    # 两次请求,在发送数据之前会先发一次请求用于做“预检”,
    # 只有“预检”通过后才再发送一次请求用于数据传输。
     
    #只要同时满足以下两大条件,就属于简单请求。                             
    # (1) 请求方法是以下三种方法之一:HEAD GET POST
    # (2)HTTP的头信息不超出以下几种字段:                                     
    # Accept                                     
    # Accept-Language                                     
    # Content-Language
    # Last-Event-ID
    # Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、 text/plain 
    #JSONP和CORS:
    # 1.JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求
    # 2.jsonp需要client和server端的相互配合
    # 3.cors在client端无需设置,server端需要针对不同的请求,来做head头的处理

     CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制

    pip install django-cors-headers
    #安装cors
    

      

    INSTALLED_APPS = [
        ...
        'corsheaders',
        ...
     ] 
    
    MIDDLEWARE_CLASSES = (
        ...
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware', # 房租common前面
        ...
    )
    #跨域增加忽略
    CORS_ALLOW_CREDENTIALS = True
    CORS_ORIGIN_ALLOW_ALL = True
    CORS_ORIGIN_WHITELIST = (
        '*'
    )
    
    CORS_ALLOW_METHODS = (
        'DELETE',
        'GET',
        'OPTIONS',
        'PATCH',
        'POST',
        'PUT',
        'VIEW',
    )
    
    CORS_ALLOW_HEADERS = (
        'XMLHttpRequest',
        'X_FILENAME',
        'accept-encoding',
        'authorization',
        'content-type',
        'dnt',
        'origin',
        'user-agent',
        'x-csrftoken',
        'x-requested-with',
        'Pragma',
    )
    #增加settings配置
    

      

  • 相关阅读:
    Linux 下使用gettimeofday函数时已添加time.h后,还是报找不到gettimeofday函数问题
    记录linux编译opencv时报错: relocation R_X86_64_PC32 against symbol `XXXX' can not be used when making a shared object; recompile with fPIC
    记录Linux 没有声音/Gnome 没有声音输出设备问题
    c#抓屏(截屏)
    抽象类与接口区别 (收集)
    种方式遍历repeater中的CheckBox全选
    .net 发送电子邮件
    Repeater 双向排序
    通过SessionID和用户名来保证同一个用户不能同时登录
    ASP.NET页面刷新方法总结
  • 原文地址:https://www.cnblogs.com/jabbok/p/10723736.html
Copyright © 2020-2023  润新知