django使用django-cors-headers实现跨域请求
AJAX跨域POST发送json时,会先发送一个OPTIONS预请求。
OPTIONS 其请求头包含了的一些关键性字段:
1 OPTIONS /upload/ HTTP/1.1
2 Access-Control-Request-Method: POST
3 Access-Control-Request-Headers: accept, content-type
4 Origin: http://edx.open.com
5 ...
Access-Control-Allow-Method 和 Access-Control-Allow-Origin 分别告知客户端,服务器允许客户端用于跨域的方法和域名。
1.安装django-cors-headers
pip install django-cors-headers
2.配置settings.py文件
2.1 配置INSTALLED_APPS
INSTALLED_APPS = [
...
'corsheaders',
...
]
2.2 配置MIDDLEWARE_CLASSES
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
)
注意顺序,CorsMiddleware必须放在CommonMiddleware前面,最好是放在Middleware的第一位
2.3 配置跨域域名和ip
CORS_ALLOW_CREDENTIALS = True # 指明在跨域访问中,后端是否支持对cookie的操作
CORS_ORIGIN_ALLOW_ALL = True # 设置支持所有域名访问,如果为False,需要指定域名
CORS_ORIGIN_WHITELIST = ('*') # 白名单,"*"支持所有域名进行访问,也可写成("域名1","域名")
ALLOWED_HOSTS = ['*'] # 允许所有ip或域名
# ALLOWED_HOSTS = ["域名1","域名2"]