跨域指的是:浏览器不能执行其他网站的脚本,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。跨域是由浏览器的同源策略造成的,是浏览器施加的安全限制。a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的。
在DJANGO里 解决这个问题需要装一个插件
#安装第三方应用
pip3 install django-cors-headers
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',# 跨域
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
以下是设置的一些方法
INSTALLED_APPS = [
...,
'corsheaders',
'rest_framework',
]
MIDDLEWARES = [
...,
'corsheaders.middleware.CorsMiddleware', #注意在common的上方,官方建议
'django.middleware.common.CommonMiddleware','
]
#允许前端请求携带Cookie(含sessionid)
CORS_ALLOW_CREDENTIALS = True #会话保持必须
# CORS_ORIGIN_ALLOW_ALL = True #允许所有的源跨域到django
CORS_ORIGIN_WHITELIST = (
'http://127.0.0.1:5000', #格式严格
) #[]也可以
#非必须
CORS_ALLOW_METHODS = (
"GET",
"POST",
"PUT",
"DELETE",
'OPTIONS'
'PATCH',
'VIEW'
)
#非必须
CORS_ALLOW_HEADERS = (
"XMLHttpRequest",
'token',
'X_FILENAME',
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
#暴露响应头,xhr才可以拿到响应头
CORS_EXPOSE_HEADERS = (
'token',
)
#缓存options请求
CORS_PREFLIGHT_MAX_AGE = 86400 #秒
标签:跨域,05,middleware,django,域名,ALLOW,CORS
From: https://blog.51cto.com/u_15813778/8560263