码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 前端调用DRI后端API出现跨域资源共享(CORS)问题解决办法


    目录

      • 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 .
    …
    在这里插入图片描述

    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
    
    • 1

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

    INSTALLED_APPS = [
        ...,
        "corsheaders",
        ...,
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    MIDDLEWARE = [
        ...,
        "corsheaders.middleware.CorsMiddleware",
        "django.middleware.common.CommonMiddleware",
        ...,
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    CORS_ALLOWED_ORIGINS = True
    
    • 1

    以上步骤完成后,前端调用后端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)

  • 相关阅读:
    Standard part function
    以命令行形式执行Postman脚本(使用Newman)
    基于注解的Spring MVC实例开发过程
    《最新出炉》系列初窥篇-Python+Playwright自动化测试-16-处理模态对话框弹窗
    openjudge 1.7.30 字符环
    用vscode进行远程主机开发
    【优测云服务平台】打造承载百倍级增长后台背后的力量-性能优化
    《Vite 基础知识》Vite 不支持 require 解决方案(三种情况/require is not defined)
    Chap12.1圆通荣达,进退自如
    .Net Core之选项模式Options使用
  • 原文地址:https://blog.csdn.net/xuan373366788/article/details/138183096
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号