CORS跨域

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属于跨域请求