OPTIONS 请求上的 CORS 标头? [重复]

问题描述 投票:0回答:1

我正在尝试使用 Angular 和 Django 设置一个 Web 应用程序,但 CORS 标头有问题。

据我了解,为了在请求中包含来自前端的cookie数据(例如csrf令牌和会话id),我需要在请求中将withCredentials设置为true。所以 GET 请求看起来像

this.http.get(this.url, { withCredentials: true });
。然后浏览器显示

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at xxx. (Reason: expected ‘true’ in CORS header ‘Access-Control-Allow-Credentials’).

我可以通过使用

response["Access-Control-Allow-Credentials"] = "true"
将标头添加到响应中来解决 GET 请求的问题,但是当我发出 POST 请求时,问题就出现了。在这种情况下,前端会在 POST 之前自动发送 OPTIONS 请求,据我所知,这是标准的,用于检查后端允许发布的内容。但是,我无法为 OPTIONS 请求的响应设置 CORS 标头,因此实际上我无法发送 POST 请求。

有没有办法设置 OPTIONS 响应的标题,或者我一般做错了什么?

django angular cors backend django-cors-headers
1个回答
1
投票

是的,有一种方法可以设置 OPTIONS 响应的标头。

  1. 安装 django-cors-headers (如果尚未安装):

您可以通过运行来做到这一点:

pip install django-cors-headers
  1. 配置 django-cors-headers:

接下来,将 corsheaders 添加到您的

settings.py
文件中已安装的应用程序和中间件中:

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

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

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

因此,如果您按照上述步骤进行操作,您的 Django 后端将正确响应 OPTIONS 请求并设置正确的 CORS 标头,这样您的 Angular 应用程序将能够发出 POST 请求而不会出现 CORS 问题。

© www.soinside.com 2019 - 2024. All rights reserved.