1. 跨域请求
1.1 同源地址
- 对于两个不同的url地址,如果其协议,域名(ip),端口完全相同这样的地址就叫同源地址,否则叫非同源地址
# 同源地址
http://127.0.0.1:8000/index/
http://127.0.0.1:8000/login/
# 非同源地址
http://127.0.0.1:8000/index/
http://127.0.0.1:8080/index/
1.2 跨域请求
- 如果源请求页面地址和被请求页面地址不是同源地址则为跨域请求
1.3 CORS跨域请求限制
- 浏览器发起==ajax==跨域请求时默认会有CORS跨域请求限制,浏览器会在请求头中携带Origin的请求头表名源请求地址,服务器在返回响应时,如果允许源地址对其进行跨域请求,需要在响应头中携带Access-Control-Allow-Origin响应头,浏览器在收到响应时,如果发现响应头中没有Access-Control-Allow-Origin响应头,浏览器会直接将请求驳回,产生CORS跨域请求限制
# 请求头中
Origin: 源请求地址
# 响应头中
Access-Control-Allow-Origin: 源请求地址
2. CORS跨域请求设置
Django项目中可以使用django-cors-headers扩展进行跨域请求设置
2.1 安装
pip install django-cors-headers
2.2 注册子应用
INSTALLED_APPS = (
...
'corsheaders',
...
)
2.3 注册中间件
MIDDLEWARE = [
# 注意:此中间件添加到中间件的第一个
'corsheaders.middleware.CorsMiddleware',
...
]
2.4 添加跨域请求白名单
- 在配置文件中添加
# CORS跨域请求设置
CORS_ORIGIN_WHITELIST = (
# 备注:允许源地址`127.0.0.1:8080`向当前API服务器发起跨域请求
'127.0.0.1:8080',
)
CORS_ALLOW_CREDENTIALS = True # 允许携带cookie
注:CSRF属于跨域请求