Django跨域

跨域报错:Access to XMLHttpRequest at 'http://127.0.0.1:8000/' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

1、为什么会出现跨域

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

2、什么是跨域

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
当前页面url被请求页面url是否跨域原因
http://www.baidu.com/http://www.baidu.com/index.html同源(协议、域名、端口号相同)
http://www.baidu.com/https://www.baidu.com/index.html跨域协议不同(http/https)
http://www.baidu.com/http://www.google.com/跨域主域名不同(google/baidu)
http://www.baidu.com/http://blog.baidu.com/跨域子域名不同(www/blog)
http://www.baidu.com:8080/http://www.baidu.com:8888/跨域端口号不同(8080/8888)

3、跨域请求解决办法(Django)

3-1、安装第三方扩展:

pip install django-cors-headers

3-2、添加应用:

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

3-3、第三步,添加中间件,注意放在第一条,第一时间进行处理:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    ...
]

3-4、配置访问规则或白名单:

允许所有域名跨域(优先选择)

CORS_ORIGIN_ALLOW_ALL = True

配置白名单

 CORS_ORIGIN_WHITELIST = (
     '*'
     # '127.0.0.1:8000',
     # 'localhost:8000',
     # '127.0.0.1:8080',
     # 'localhost:8080',
     # 'ads-cms-api.aataotao.com:8000'  #
     # 'taoduoduo-test.oss-cn-shenzhen.aliyuncs.com:80',  # 线上
     # '10.0.2.187:8080'  # 本地
 )

3-5、允许携带Cookie:

CORS_ALLOW_CREDENTIALS = True

注意:
如果使用了Nginx:则配置如下规则:

sudo vim /usr/local/nginx/conf/nginx.conf
location / {
    proxy_pass 127.0.0.1:8000/;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值