所请求的资源Django和ReactJS上没有'Access-Control-Allow-Origin'标头

时间:2018-12-18 19:09:37

标签: django reactjs cors django-cors-headers

目前,我有 Django 1.98 作为后端,而React作为前端。

我收到此错误:

  

在以下位置访问XMLHttpRequest   原产地的“ https://mywebsite:8000/uploads/vtt/”   “ http://localhost:3000”已被CORS政策禁止:否   请求中存在“ Access-Control-Allow-Origin”标头   资源。

我在虚拟环境上安装了 django-cors-headers == 2.4.0

这是我的 settings.py 文件:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'uploads.core',
    'corsheaders',
]

MIDDLEWARE_CLASSES = [
    '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.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

CORS_ORIGIN_ALLOW_ALL = True

CSRF_TRUSTED_ORIGINS = ['http://127.0.0.1:3000','http://localhost:3000','http://localhost:8000','https://mywebsite:8000','https://myapp.firebaseapp.com','https://mywebsite:8088']
CSRF_COOKIE_NAME = "csrftoken"
CSRF_HEADER_NAME = [
    'HTTP_X_CSRFTOKEN'
]

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

CORS_ORIGIN_WHITELIST = ['http://localhost:3000','https://mywebsite:8088']

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

任何想法如何解决? 谢谢。

4 个答案:

答案 0 :(得分:1)

确保https://mywebsite:8000/uploads/vtt/是正确的URL。
就我而言,我使用了错误的端口,因为我的API使用了其他端口。
我将8000替换为52130

答案 1 :(得分:0)

尝试添加:

CORS_ORIGIN_WHITELIST = (
    'example.com',
    'localhost:3000',
    '127.0.0.1:3000',
    'more.domain.or.subdomains'
)

别忘了也添加中间件

MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

答案 2 :(得分:0)

django-cors-headers相当简单,我的配置似乎正确。

但是我也遇到了一个难题: 您的上载目录可能不是通过Django提供的,而是由服务器直接作为静态文件提供的(最佳实践和Django中几乎默认的行为)。甚至内置的开发服务器也将在不调用Django应用程序的情况下提供静态文件。

由于未调用您的应用,因此django-cors-headers无法将CORS标头应用于这些响应。

答案 3 :(得分:0)

我遇到了同样的问题,我认为这是一个问题:

SECURE_SSL_REDIRECT = True

我不知道禁用它会带来什么影响,但是将其设置为:

SECURE_SSL_REDIRECT = False

这使cors问题消失了。