首页 > 解决方案 > 访问被 CORS 策略阻止:没有“访问控制允许来源”

问题描述

我正在使用以下版本

  • 蟒蛇 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 开发者工具中提取的相关请求和响应详细信息

一般 请求网址: http: //10.0.123.123 :8998/api/box?unit=101&box=TOT000000000051345&login_user_id=USERID&reserve_locn=101

请求方法:选项

状态码: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

访问控制请求标头:内容类型

来源: http: //10.0.123.123 :8999

用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36

Sec-Fetch-Mode: cors

推荐人:http : //10.0.123.123 :8999/

接受编码:gzip,放气

接受语言:en-GB,en-US;q=0.9,en;q=0.8

标签: python-3.xdjangodjango-rest-frameworkcorsdjango-cors-headers

解决方案


您用于向 django 服务器发出请求的每个 IP 地址或域都应添加到 settings.py 中,如下所示:

CORS_ORIGIN_WHITELIST = ('http://localhost:3000','http://10.0.123.123:8998')

让我在评论中知道结果。


推荐阅读