DRF--跨域问题解决

1.什么是跨域?
        跨域是因为浏览器的同源策略导致的,也就是说浏览器会阻止非同源的请求。那什么是非同源呢?既域名不同,端口不同,都属于非同源的。比如我们用vue写了个前端页面,端口为8081,Django写了个后台,端口为8000,前端往后台提交数据,后台返回数据会被浏览器拦截,因为端口不同。这就是跨域。

浏览器只阻止表单以及ajax请求,并不会阻止src请求。所以我们得CDN,图片等src都可以发送。

跨域请求分为两种,一种是简单请求,一种是复杂请求。

        1.1 简单请求
                HTTP方法是下列方法之一 :HEAD、GET、POST
                HTTP头信息不超过以下几种字段:Accept,Accept-Language、Content-Language、

                        Last-Event-ID,application/x-www-from-urlencode,multpart/from-data,text/plain
        1.2 复杂请求 
                任何一个不满足上述要求的情求,都认为是复杂请求,复杂请求会先发出一个预请求,

                我们也叫预检,OPTIONS请求比如发送了一个post请求,

                Content-Type为application/json,这就是复杂请求

2.解决跨域:

        使用第三方库解决跨域的问题

        2.1.安装第三方库django-cors-headers

                pip3 install django-cors-headers

        2.2.django-cors-headers是一个app,所以需要我们在settings.py里的app里注册 corsheaders,尽量放在前面

 

        2.3.添加中间件,需要放在 'django.middleware.common.CommonMiddleware' 中间件之前

                'corsheaders.middleware.CorsMiddleware'


        2.4.添加白名单


CORS_ALLOW_CREDENTIALS = True  # 允许跨域时携带Cookie,默认为False
CORS_ORIGIN_ALLOW_ALL = True  # 所有ip都可以访问后端接口
# CORS_ORIGIN_WHITELIST = ["http://127.0.0.1:8080",["http://192.168.10.1:8080"]  # 指定能够访问后端接口的ip或域名列表

# 允许访问的请求方法
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
)

# 允许的headers
CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)


这样就可以解决跨域的问题
        

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值