django-cors-headers 根本不工作

Posted

技术标签:

【中文标题】django-cors-headers 根本不工作【英文标题】:django-cors-headers not working at all 【发布时间】:2018-06-23 05:15:06 【问题描述】:

嗯,一开始我忘记了中间件类,但添加之后就很好用了(一周前)。

现在,我回到我的工作站,发现它再次无法工作。

ACCESS_CONTROL_ALLOW_ORIGIN 标头根本没有设置。

我已经尝试了所有方法,将中间件放在顶部,CommonMiddleware 之前,但它不起作用。

这是我的 setting.py 文件:

DEBUG = True

ALLOWED_HOSTS = ['*']

# Application definition
INSTALLED_APPS = [
    'account',
    'corsheaders',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'social_django',
]

# if DEBUG:
#     INSTALLED_APPS += 'corsheaders',
#     MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware', ]
# else:
#     MIDDLEWARE = []

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_ALLOW_ALL = DEBUG

这是我得到的回复:

Date: Sun, 14 Jan 2018 09:35:09 GMT
Server: WSGIServer/0.1 Python/2.7.14+
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=utf-8
Content-Length: 146

【问题讨论】:

我也有同样的问题。你找到解决办法了吗? 【参考方案1】:
# Cors headers

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

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',
)

【讨论】:

【参考方案2】:

仅当请求中存在origin 标头时,响应中才会包含Access-Control-Allow-Origin

浏览器会自动添加此标头,因此您不应该在使用您的 API 的网页上看到 CORS 错误。

对我来说,这个请求没有返回 Access-Control-Allow-Origin:

curl -v -H "Content-Type: application/json" localhost:80/status

这个可以:

curl -v -H "Content-Type: application/json" -H "origin: *" localhost:80/status

GitHub 页面上的答案: https://github.com/adamchainz/django-cors-headers/issues/438

【讨论】:

以上是关于django-cors-headers 根本不工作的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 django-cors-headers 让我的 API 正常工作而不会出现 405 错误

django-cors-headers 不适用于 DRF(Django Rest 框架)

将 ID 添加到 URL 时,django-cors-headers 不起作用

我正在使用 angularjs 和 django-cors-headers 然后给出“这对于需要预检的跨域请求是不允许的。”

django-cors-headers CORS_ORIGIN_WHITELIST 元组与字符串问题