美文网首页
28、Django_解决请求跨域问题

28、Django_解决请求跨域问题

作者: 猪儿打滚 | 来源:发表于2020-07-21 08:52 被阅读0次

    一、什么是跨域

    当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。

    • 例子
    当前页面url 被请求页面url 是否跨域 原因
    http://www.test.com/ http://www.test.com/index.html 同源(协议、域名、端口号相同)
    http://www.test.com/ https://www.test.com/index.html 跨域 协议不同(http/https)
    http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu)
    http://www.test.com/ http://blog.test.com/ 跨域 子域名不同(www/blog)
    http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口号不同(8080/7001)

    二、为什么会出现跨域问题

    出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。
    可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。

    三、Django中解决

    • 1、安装django-cors-headers
      pip install -i https://pypi.douban.com/simple django-cors-headers
    • 2、设置settings.py文件,注册settings
    INSTALLED_APPS = [
        # 跨域设置 pip install django-cors-headers
        'corsheaders',
    
    • 3、设置settings.py文件,添加中间件
    MIDDLEWARE = [
        # 跨域设置,需要添加在CommonMiddleware中间件之前
        'corsheaders.middleware.CorsMiddleware',
        # CommonMiddleware是django自带的
        'django.middleware.common.CommonMiddleware',  
    ]
    
    • 4、设置settings.py文件,添加白名单、允许携带cookies等设
    # CORS_ORIGIN_ALLOW_ALL为True, 指定所有域名(ip)都可以访问后端接口, 默认为False
    CORS_ORIGIN_ALLOW_ALL = True
    
    # CORS 设置跨域域名
    # CORS_ORIGIN_WHITELIST = (
    # '127.0.0.1:8080',
    # 'localhost:8080',
    # 'www.xxxx.com:8080',
    # 'api.xxxx.com:8000'
    # )
    
    # 允许跨域时可携带cookie,默认False
    CORS_ALLOW_CREDENTIALS = True
    # 前端需要携带cookies访问后端时,需要设置
    withCredentials: True
    

    相关文章

      网友评论

          本文标题:28、Django_解决请求跨域问题

          本文链接:https://www.haomeiwen.com/subject/ubmbkktx.html