Django解决跨域请求的问题
CORS: cross-origin resource sharing 跨域资源共享
CORS 需要浏览器和服务器同时支持,整个CORS的过程,都是浏览器自动完成,对于用户来说是无感的,先要实现 CORS 的关键是服务器,只要服务器实现了 CORS 接口,就可以跨域通信
同源策略: 浏览器最核心最基础的安全功能
何为同源:
url的协议,主机,端口完全一致的时候就是同源(端口默认是80)
http://example.com/
http://example.com:80/
http://example.com/path
上面的每个url都是同源的
以下每个资源都是不同源的
http://example.com/
http://example.com:8080/
http://www.example.com/
https://example.com/
https://www.baidu.com/
何为同源策略,简单理解,就当打开某个页面后,这个页面上的ajax请求默认只能向和页面同源的url发送http请求
django-cors-headers 是一个处理cors所需服务器头信息的一个django应用
1、安装django-cors-headers模块
pip install django-cors-headers
2、插入Django的APP配置中
# 修改settings.py中的INSTALLED_APPS配置 INSTALLED_APPS = ['corsheaders']
3、注册CorsMiddleware中间件
jdango查找中间件由上到下,注意要放到 CommonMiddleware 上面 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', # CORS中间件 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
4、跨域设置
# 服务器运行跨域的域名 CORS_ALLOWED_ORIGINS = [ # 设置允许跨域的域名 'http://localhost:8000', 'http://127.0.0.1:8001', ] # 允许cookie跨域 # CORS_ALLOW_CREDENTIALS = True # 允许所有来源跨域 CORS_ALLOW_ALL_ORIGINS = True
具体介绍可以查看 https://pypi.org/project/django-cors-headers/