前端调用DRI后端API出现跨域资源共享(CORS)问题解决办法

2024-07-21 1306阅读

目录

    • 1. 引言
    • 2. 跨源资源共享和实现方法
    • 3. 在Django项目中配置django-cors-headers库
      • Reference

        1. 引言

        在进行后端API开发时,有时会遇到“跨域资源共享 (CORS) 请求…被阻止“的错误,如图1所示。本文讲解如何在使用DRF(Django REST Framework)的后端API开发项目中解决这个问题。

        A cross-origin resource sharing (CORS) request was blocked because of invalid or missing response headers of the request or the associated preflight request .

        前端调用DRI后端API出现跨域资源共享(CORS)问题解决办法

        2. 跨源资源共享和实现方法

        跨源资源共享(Cross-Origin Resource Sharing)是一种机制,允许在Web浏览器的安全性限制下,从一个域(网站)的客户端向另一个域的服务器发送跨域HTTP请求。

        DRF官方给出有关跨域资源共享的两种实现方式:

        (1)在 REST 框架中处理 CORS 的最佳方法是在中间件中添加所需的响应标头,这种方式透明地支持 CORS,无需更改视图中的任何行为。

        (2)使用django-cors-headers。

        Cross-Origin Resource Sharing is a mechanism for allowing clients to interact with APIs that are hosted on a different domain. CORS works by requiring the server to include a specific set of headers that allow a browser to determine if and when cross-domain requests should be allowed.

        The best way to deal with CORS in REST framework is to add the required response headers in middleware. This ensures that CORS is supported transparently, without having to change any behavior in your views.

        Adam Johnson maintains the django-cors-headers package, which is known to work correctly with REST framework APIs.

        3. 在Django项目中配置django-cors-headers库

        (1)使用pip在环境中安装django-cors-headers库:

        python -m pip install django-cors-headers
        

        (2)在setting.py文件的INSTALLED_APPS中添加"corsheaders":

        INSTALLED_APPS = [
            ...,
            "corsheaders",
            ...,
        ]
        

        (3)在setting.py文件的MIDDLEWARE中添加中间件类用于监听响应:

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

        (4)在setting.py文件中添加变量CORS_ALLOWED_ORIGINS并设置为True.

        CORS_ALLOWED_ORIGINS = True
        

        以上步骤完成后,前端调用后端DRF API时所出现的CORS错误就被消除了。

        Reference

        AJAX, CSRF & CORS - Django REST framework

        GitHub - adamchainz/django-cors-headers: Django app for handling the server headers required for Cross-Origin Resource Sharing (CORS)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]