zoukankan      html  css  js  c++  java
  • django 跨域问题

    django 跨域问题

    一、问题

    由于开发模式为前后端分离式开发,故而通常情况下,前端和后端可能运行不同的ip或者port下,导致出现跨域问题
    
    由于浏览器的同源(协议、域名、端口号都相同)策略,不同域名之间是不能相互访问传递数据,要使两个域名间传递数据,后端要添加跨域访问支持。
    
    同源策略:
    	同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源
    
    出现跨域错误在浏览器显示错误信息:
    Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/test/' from origin 'http://127.0.0.1:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    

    二、后端解决跨域问题

    使用 django-cors-headers 中间件

    ## 前提条件
    
    Python 3.5-3.7 supported.
    Django 1.11-2.2 suppported.
    

    2.1安装

    1.下载中间件
    ## Install from pip:
    pip3 install django-cors-headers
    
    2.配置中间件
    INSTALLED_APPS = [
        ...
        'corsheaders',
        ...
    ]
    MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
        ...
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware',
        ...
    ]
    #跨域增加忽略
    CORS_ALLOW_CREDENTIALS = True
    CORS_ORIGIN_ALLOW_ALL = True
    CORS_ORIGIN_WHITELIST = (
        '*'
    )
    # default 默认设置:
    CORS_ALLOW_METHODS = (
        'DELETE',
        'GET',
        'OPTIONS',
        'PATCH',
        'POST',
        'PUT',
    )
    # default 默认设置:
    CORS_ALLOW_HEADERS = (
        'accept',
        'accept-encoding',
        'authorization',
        'content-type',
        'dnt',
        'origin',
        'user-agent',
        'x-csrftoken',
        'x-requested-with',
    )
    
    # 官网给的建议:将CorsMiddleware尽可能的放在最上方,尤其是CommonMiddleware 和 WhiteNoiseMiddleware
    # github地址: https://github.com/ottoyiu/django-cors-headers/
    
  • 相关阅读:
    转:C/C++基本数据类型所占字节数
    转:为什么C++中空类和空结构体大小为1?
    转:内存字节对齐
    转:100层楼扔两个鸡蛋的问题
    移动互联网
    辗转相除法
    斐波那契数列
    error C2783: 无法为“T”推导 模板 参数
    创新工场和海豚浏览器宣讲会启示
    转:快速排序的一个小问题没想明白,求助各位
  • 原文地址:https://www.cnblogs.com/xt12321/p/11116401.html
Copyright © 2011-2022 走看看