CORS全称是Cross-Origin Resource Sharing,这个机制使用了一个额外的HTTP响应头来赋予当前user-agent(浏览器)获得在当前源(origin)下使用非同源资源的权限。 非同源就是Cross-Origin的概念,这里边的权限就是访问非同源的资源权限,出于安全的原因,浏览器限制从脚本内发起跨源的HTTP请求,也就意味着限定了当前web应用程序只能请求与当前同域(同源)的HTTP资源,除非使用CORS头信息。
在使用前后端分离的方式开发应用程序时,经常会碰到 A域名提供后端接口,B域名下的页面脚本调用A域名的接口, 此时,就需要在A域名的接口响应里增加CORS响应头Access-Control-Allow-Origin。
使用django开发的接口,默认会使用默认策略,SAME-ORIGIN,也就是不允许外站访问。django-cors-headers组件提供了一种方式, 可以统一管理CORS配置。
第一步,安装
pip install django-cors-headers
第二步,修改settings.py
INSTALLED_APPS = [ ..., "corsheaders", ..., ] ... # 必须把CorsMiddleware 放在CommonMiddleware前面,否则无效 # 如果项目中使用了WhiteNoise,也要把CorsMiddleware放在WhiteNoiseMiddleware前面 MIDDLEWARE = [ ..., "corsheaders.middleware.CorsMiddleware", "django.middleware.common.CommonMiddleware", ..., "whitenoise.middleware.WhiteNoiseMiddleware", ..., ]
接下来,就是在settings.py中添加配置项
# 列表形式, 组件早期版本,该配置项的名称是 CORS_ORIGIN_WHITELIST CORS_ALLOWED_ORIGINS = [ "https://example.com", "https://sub.example.com", "http://localhost:8080", "http://127.0.0.1:9000", ] # 正则形式 CORS_ALLOWED_ORIGIN_REGEXES = [ r"^https://\w+\.example\.com$", ] # 如果配置允许所有源,则以上两项配置无效 CORS_ALLOW_ALL_ORIGINS = True # 如果只需要对/api/开头的接口启用配置,使用以下配置,默认值是全部接口r'^.*$' CORS_URLS_REGEX = r"^/api/.*$"
更详细的参数,参考链接:https://pypi.org/project/django-cors-headers/
2025/9/14 于 北京 上东廓