【发布时间】:2021-11-03 23:49:48
【问题描述】:
我正在使用以下版本
- Python 3.9.6
- Django 3.2.3
- django-cors-headers==3.7.0
我的 settings.py 中有以下内容
CORS_ALLOW_ALL_ORIGINS=True
CORS_ORIGIN_WHITELIST = ('http://localhost:3000',)
由于某种原因,其中一个 API 调用失败并出现此错误。
CORS 策略阻止了从源获取的访问:请求的资源上不存在“Access->Control-Allow-Origin”标头。如果不透明响应满足 >您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
我无法理解为什么会出现此错误。
以下是从 Google Chrome 开发者工具中提取的相关请求和响应详细信息
请求方法:OPTIONS
状态码:200 OK
远程地址:10.0.123.123:8998
推荐人政策:strict-origin-when-cross-origin
响应标头 Access-Control-Allow-Headers:accept、accept-encoding、authorization、content-type、dnt、origin、user-agent、x-csrftoken、x-requested-with
访问控制允许方法:DELETE、GET、OPTIONS、PATCH、POST、PUT
访问控制允许来源:*
访问控制最大年龄:86400
连接:保持活动
内容长度:0
内容类型:文本/html;字符集=utf-8
日期:格林威治标准时间 2021 年 9 月 7 日星期二 01:15:10
服务器:nginx/1.20.1
变化:原产地
请求标头
选项 /api/box?unit=101&box=TOT000000000051345&login_user_id=USERID&reserve_locn=101 HTTP/1.1
主机:10.0.123.123:8998
连接:保持活动
接受:/
访问控制请求方法:GET
访问控制请求标头:内容类型
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/92.0.4515.159 Safari/537.36
Sec-Fetch-Mode:cors
接受编码:gzip、deflate
接受语言:en-GB,en-US;q=0.9,en;q=0.8
【问题讨论】:
-
你是否在中间件中添加了cors并在django设置中安装了应用程序?
-
您是否发送凭据请求?
-
虽然the documentation of django-cors-headers 没有提及,但
CORS_ALLOW_ALL_ORIGINS优先于CORS_ORIGIN_WHITELIST(CORS_ALLOWED_ORIGINS的别名)。如果您检查the source code,这一点就会变得很明显。这不足以解决您的问题,但至少您不需要两个配置。
标签: python-3.x django django-rest-framework cors django-cors-headers