代码之家  ›  专栏  ›  技术社区  ›  bp-pet

OPTIONS请求上的CORS标头?

  •  0
  • bp-pet  · 技术社区  · 11 月前

    我试图用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’).
    

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

    是否有方法为OPTIONS响应设置标题,或者我通常做错了什么?

    1 回复  |  直到 11 月前
        1
  •  0
  •   Celian Frasca    11 月前

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

    1. 安装django-cors头文件(如果尚未安装):

    您可以通过运行以下命令来实现:

    python
    pip install django-cors-headers
    
    1. 配置django-cors标头:

    接下来,将corsheader添加到您已安装的应用程序和中间件中 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问题。