Django CORS 拒绝访问,即使我设置了 CORS_ORIGIN_ALLOW_ALL = True

Posted

技术标签:

【中文标题】Django CORS 拒绝访问,即使我设置了 CORS_ORIGIN_ALLOW_ALL = True【英文标题】:Django CORS denying access even though I've set CORS_ORIGIN_ALLOW_ALL = True 【发布时间】:2021-07-18 07:43:42 【问题描述】:

我有 2 个独立的项目,project A 需要从 project B 访问一些东西。我已经在 project B 上安装了 CORS,但从 project A 访问其资源仍然会引发以下错误:

Access to XMLHttpRequest at 'http://api.example.com/api/spotify/1IJxbEXfgiKuRx6oXMX87e' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

项目 B 上的 CORS 设置为 CORS_ORIGIN_ALLOW_ALL = True

我是否缺少其他设置或其他内容?

【问题讨论】:

【参考方案1】:

确保您具有documentation 的以下设置部分,尤其是对于 MIDDLEWARE:

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

CorsMiddleware 应放置在尽可能高的位置,尤其是在任何可以生成响应的中间件之前,例如 Django 的 CommonMiddleware 或 Whitenoise 的 WhiteNoiseMiddleware。如果不是之前,它将无法将 CORS 标头添加到这些响应中。

CORS_ORIGIN_ALLOW_ALL 在较新版本中已重命名为 CORS_ALLOW_ALL_ORIGINS

【讨论】:

感谢泽维尔的回复!我应该把它放在我原来的问题中,但我的中间件顺序正确,重命名为 CORS_ALLOW_ALL_ORIGINS 并没有解决任何问题。 我记得在调用端点 (url + / ) 时是否添加了斜杠时遇到了类似的问题。 Django 拒绝了我的请求,因为我的 URL 没有在我的 urls.py 中定义,因为我忘记了这个斜杠。 试过了,还是没有骰子。我可以知道你使用的是什么版本的 Django/django-cors-headers 吗?

以上是关于Django CORS 拒绝访问,即使我设置了 CORS_ORIGIN_ALLOW_ALL = True的主要内容,如果未能解决你的问题,请参考以下文章

在 Web API 中启用了 CORS,但访问被拒绝

CORS 策略阻止请求,即使访问允许来源设置为 *

即使使用 RPC_C_AUTHN_NONE,Windows RPC 访问也会被拒绝

使用 CORS 调用本地 URL 时 IE10 中的访问被拒绝

Django Angular cors错误:不允许访问控制允许来源

即使使用 django-cors-headers 也得到 304 响应