在 Web 页面中可以随意地载入跨域的图片、视频、样式等资源, 但 AJAX 请求通常会被浏览器应用同源安全策略,禁止获取跨域数据,以及限制发送跨域请求。 虽然有多种方法利用资源标签进行跨域,但能够进行的数据交互非常有限。 在 2014 年 W3C 发布了 CORS Recommendation 来允许更方便的跨域资源共享。 默认情况下浏览器对跨域请求不会携带 Cookie,但鉴于 Cookie 在身份验证等方面的重要性, CORS 推荐使用额外的响应头字段来允许跨域发送 Cookie
前端代码配置:
在open XMLHttpRequest后,设置withCredentials为true即可让该跨域请求携带 Cookie。 注意携带的是目标页面所在域的 Cookie。
var xhr=newXMLHttpRequest();
xhr.open('GET',url);
xhr.withCredentials=true;
xhr.send();
后端django配置:
1.安装django-cors-headers
pip install django-cors-headers
2.配置settings.py文件
a.添加应用
INSTALLED_APPS = [
'corsheaders',
]
b.添加中间件
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
]
c.其他配置
# 配置允许跨站访问本站的地址
CORS_ORIGIN_ALLOW_ALL = True
# CORS_ORIGIN_WHITELIST = (
# 'localhost:8000', # 请求的域名(此处仅在CORS_ORIGIN_ALLOW_ALL = False时有效)
# )
# 定义允许的匹配路径正则表达式
CORS_URLS_REGEX = '^.*$'
# 设置允许访问的方法
CORS_ALLOW_METHODS = (
'GET',
'POST',
'PUT',
'PATCH',
'DELETE',
'OPTIONS',
)
# 跨域允许证书
CORS_ALLOW_CREDENTIALS = True
# 设置允许的header
CORS_ALLOW_HEADERS = (
'Klicen-Agent',
'Content-Type',
'X-Requested-With',
'xyt-agent',
)