Django CORS 标头未按文档中的建议工作

Posted

技术标签:

【中文标题】Django CORS 标头未按文档中的建议工作【英文标题】:Django CORS Headers not Working as Suggested in Docs 【发布时间】:2021-01-21 08:43:45 【问题描述】:

Django Cors 标头的 DOCS,https://pypi.org/project/django-cors-headers/, 明确指出CORS_ALLOWED_ORIGINS

以前的这个设置 被称为CORS_ORIGIN_WHITELIST,它仍然作为别名工作,与 新名称优先。

从代码中,如果我使用CORS_ORIGIN_WHITELIST,我的请求将通过,但如果我使用CORS_ALLOWED_ORIGINS,同时注释掉CORS_ORIGIN_WHITELIST,我的请求将被阻止。在我的选项请求中,我没有得到任何响应,随后的 POST 请求被阻止。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    #APPS
    ....

    #ADDL FRAMEWORKS
    'corsheaders',
    'rest_framework',
    'oauth2_provider',
    'django_extensions',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

CORS_ORIGIN_WHITELIST = [
    'http://127.0.0.1:3000',
    'http://localhost:3000'
]

# CORS_ALLOWED_ORIGINS = [
#     'http://127.0.0.1:3000',
#     'http://localhost:3000',
# ]

CORS_ALLOW_METHODS = [
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
]

CORS_ALLOW_HEADERS = [
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
]

【问题讨论】:

您使用哪个版本的django-cors-headers 非常感谢,应该是我应该首先检查的地方。我使用的是 3.4.0 版本,他们更新了 3.5.0 中的名称 【参考方案1】:

这是一个VERSION错误。 CORS_ORIGIN_WHITELIST 在版本3.5.0 中更改为CORS_ALLOWED_ORIGIN,而我似乎运行的是旧版本。

【讨论】:

以上是关于Django CORS 标头未按文档中的建议工作的主要内容,如果未能解决你的问题,请参考以下文章

访问被 CORS 标头阻止

Django-添加到服务器标头(CORS)

Django 1.11:模板中的 URL 函数未按预期工作

Django CORS 标头白名单不起作用

使用 Postman 时 django-cors-header 无法按预期工作

django-cors-headers 和 nginx 配置:预检响应缺少 CORS 标头