当前位置: 首页 > news >正文

FastAPI解决跨域报错net::ERR_FAILED 200 (OK)

目录

一、跨域问题的本质

二、FastAPI中的CORS处理

1. 安装FastAPI和CORS中间件

2. 配置CORS中间件

3. 运行FastAPI应用

三、解决跨域报错的步骤

四、案例:解决Vue.js与FastAPI的跨域问题

1. Vue.js前端应用

2. FastAPI后端API

3. 配置CORS中间件

4. 运行和测试

五、总结



在前后端分离的开发模式中,跨域问题是一个常见的挑战。特别是当使用FastAPI构建后端API时,前端应用可能会因为跨域策略的限制而无法成功调用这些API。本文将深入探讨FastAPI如何解决跨域报错net::ERR_FAILED 200 (OK),通过通俗易懂的解释、具体的代码示例和实用的案例,帮助你快速解决这一问题。

一、跨域问题的本质

跨域,即跨源资源共享(CORS),是指浏览器出于安全考虑,不允许一个源(协议、域名、端口三者之一不同即为不同源)的文档或脚本请求另一个源的资源。当前端应用和后端API部署在不同的域或端口上时,就会触发跨域问题。

报错net::ERR_FAILED 200 (OK)通常意味着请求已经成功到达服务器,但服务器返回的响应被浏览器的跨域策略拦截了。这通常是因为服务器没有正确设置CORS相关的响应头。

二、FastAPI中的CORS处理

FastAPI提供了内置的CORS中间件,可以方便地配置跨域访问策略。通过添加这个中间件,你可以指定哪些源可以访问你的API,以及允许哪些HTTP方法和请求头。

1. 安装FastAPI和CORS中间件

首先,确保你已经安装了FastAPI和相关的依赖。如果你还没有安装,可以使用pip进行安装:

pip install fastapi uvicorn

FastAPI的CORS中间件是fastapi.middleware.cors.CORSMiddleware。你不需要额外安装任何库,因为它已经包含在FastAPI中。

2. 配置CORS中间件

在你的FastAPI应用中,你需要添加CORS中间件并配置相关的参数。以下是一个简单的示例:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()# 配置CORS中间件
origins = ["http://localhost:3000",  # 前端应用的地址"http://127.0.0.1:3000",  # 另一个可能的前端地址
]app.add_middleware(CORSMiddleware,allow_origins=origins,  # 允许访问的源allow_credentials=True,  # 是否允许携带身份凭证(如cookies)allow_methods=["*"],  # 允许的HTTP方法(如GET、POST等)allow_headers=["*"],  # 允许的请求头
)# 定义API路由
@app.get("/")
async def read_root():return {"message": "Hello, FastAPI!"}

在这个示例中,我们创建了一个FastAPI应用,并添加了CORS中间件。我们指定了两个允许的源(origins),并设置了允许携带身份凭证、允许所有HTTP方法和请求头。

3. 运行FastAPI应用

你可以使用Uvicorn来运行你的FastAPI应用:

uvicorn your_app_name:app --reload

将your_app_name替换为你的Python脚本或包名(不包含.py后缀)。

三、解决跨域报错的步骤

当你遇到跨域报错net::ERR_FAILED 200 (OK)时,可以按照以下步骤进行排查和解决:

  • 检查前端地址:
  • 确保你配置在CORS中间件中的allow_origins包含了前端应用的地址。如果前端应用部署在多个地址上,你需要将它们都添加到allow_origins中。
  • 检查请求方法和请求头:
  • 确保你配置的allow_methods和allow_headers包含了前端应用发送请求时使用的HTTP方法和请求头。如果你不确定前端使用了哪些方法和头,可以设置为["*"]来允许所有方法和头。
  • 检查身份凭证:
  • 如果你的API需要身份验证(如使用cookies),你需要将allow_credentials设置为True。否则,浏览器会因为安全策略而拒绝携带身份凭证的请求。
  • 检查服务器响应:
  • 使用浏览器的开发者工具(如Chrome的DevTools)查看网络请求的响应头。确保服务器返回了正确的CORS相关的响应头(如Access-Control-Allow-Origin)。
  • 检查前端代码:
  • 确保前端代码中的API请求地址是正确的,并且没有发送不被允许的请求方法或头。

四、案例:解决Vue.js与FastAPI的跨域问题

以下是一个具体的案例,展示了如何解决Vue.js前端应用与FastAPI后端API之间的跨域问题。

1. Vue.js前端应用

假设你有一个Vue.js应用,它尝试调用部署在http://localhost:8000的FastAPI后端API。

// 在Vue组件中发送请求
axios.get('http://localhost:8000/api/data').then(response => {console.log(response.data);}).catch(error => {console.error('Error fetching data:', error);});

2. FastAPI后端API

你的FastAPI后端API可能看起来像这样:

from fastapi import FastAPIapp = FastAPI()@app.get("/api/data")
async def get_data():return {"message": "Hello from FastAPI!"}

3. 配置CORS中间件

在你的FastAPI应用中,你需要添加CORS中间件,并允许Vue.js应用的地址(假设是http://localhost:3000):

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()# 配置CORS中间件
origins = ["http://localhost:3000",  # Vue.js应用的地址
]app.add_middleware(CORSMiddleware,allow_origins=origins,allow_credentials=False,  # Vue.js应用通常不需要携带身份凭证allow_methods=["GET", "POST"],  # 允许GET和POST方法allow_headers=["*"],  # 允许所有请求头
)# 定义API路由(与之前相同)
@app.get("/api/data")
async def get_data():return {"message": "Hello from FastAPI!"}

4. 运行和测试

运行你的FastAPI应用和Vue.js应用,然后在Vue.js应用中触发API请求。你应该能够在浏览器的开发者工具中看到成功的网络请求和响应。

如果一切配置正确,你将不会再看到跨域报错net::ERR_FAILED 200 (OK),而是能够正常获取到FastAPI后端API返回的数据。

五、总结

跨域问题是前后端分离开发中常见的一个挑战,但通过使用FastAPI内置的CORS中间件,你可以轻松地配置跨域访问策略并解决跨域报错。本文详细介绍了如何安装FastAPI、配置CORS中间件、解决跨域报错的步骤以及一个具体的案例。希望这些内容能够帮助你快速解决跨域问题,并提升你的开发效率。

相关文章:

FastAPI解决跨域报错net::ERR_FAILED 200 (OK)

目录 一、跨域问题的本质 二、FastAPI中的CORS处理 1. 安装FastAPI和CORS中间件 2. 配置CORS中间件 3. 运行FastAPI应用 三、解决跨域报错的步骤 四、案例:解决Vue.js与FastAPI的跨域问题 1. Vue.js前端应用 2. FastAPI后端API 3. 配置CORS中间件 4. 运行…...

git如何新建分支并提交?

1. 检查当前分支 在开始之前,最好确认你当前所在的分支。 git branch 当前分支前面会有一个 *号。 2. 新建分支 使用 git branch 命令创建一个新的分支。假设你要创建一个名为 new-feature 的分支。 git branch new-feature 3. 切换到新分支 使用 git checkou…...

使用 LlamaFactory 结合开源大语言模型实现文本分类:从数据集构建到 LoRA 微调与推理评估

文章目录 背景介绍文本分类数据集Lora 微调模型部署与推理期待模型的输出结果 文本分类评估代码 背景介绍 本文将一步一步地,介绍如何使用llamafactory框架利用开源大语言模型完成文本分类的实验,以 LoRA微调 qwen/Qwen2.5-7B-Instruct 为例。 文本分类…...

Python基础学习总结篇

Python基础学习_01注释、变量、计算、打印 Python基础学习-02转义、输入、函数 Python基础学习-03逻辑分支语句、循环 Python基础学习-04列表List Python基础学习-05元组 tuple Python基础学习-06字典Dict Python基础学习-07不可重复的set集合 Python基础学习-08字符串 …...

8. Debian系统中显示屏免密码自动登录

本文介绍如何在Debian系统上,启动后,自动免密登录,不卡在登录界面。 1. 修改lightDM配置文件 嵌入式Debian系统采用lightDM显示管理器,所以,一般需要修改它的配置文件/etc/lightdm/lightdm.conf,找到[Seat…...

ubuntu安装nginx并设置开机自启动

1、下载nginx相关依赖包 sudo apt-get install gccsudo apt-get install libpcre3 libpcre3-devsudo apt-get install zlib1g zlib1g-devsudo sudo apt-get install opensslsudo apt-get install libssl-devsudo apt install make2、进入想下载安装包位置 cd /usr/local3、通…...

SQLServer中使用ISNULL替换为指定的替换值

ISNULL (Transact-SQL) 适用于: SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics 分析平台系统 (PDW)Microsoft Fabric 中的 SQL 分析端点Microsoft Fabric 中的仓库 NULL替换为指定的替换值。 1、语法 ISNULL ( check_expression , rep…...

深入浅出:PHP函数的定义与使用

文章目录 前言什么是函数定义函数语法示例 调用函数示例 参数传递按值传递示例按引用传递示例默认参数示例可变数量的参数示例 返回值示例 变量作用域全局作用域示例局部作用域示例静态作用域示例 匿名函数示例闭包示例 递归函数示例 内置函数常见内置函数示例 用户自定义函数示…...

C++知识整理day4内存管理——new和delete详解

文章目录 1.C/C内存分布2.C语言中动态内存管理:malloc/realloc/calloc3.C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4.malloc/free和new/delete到底什么区别?4.1 对于自定义类型4.2 对于自定义类型4.3 总结:它们…...

部署项目报错

vue2项目部署后 Error: Cannot find module /views/*** 1.起因 登录页、首页等静态页面可以正常进入,后端访问也正常,可以获取到验证码。 但是登录之后会发现首页空白或者进入不到首页 F12查看有报错信息:Error: Cannot find module ‘/v…...

专业140+总分420+上海交通大学819考研经验上交电子信息与通信工程,真题,大纲,参考书。博睿泽信息通信考研论坛,信息通信考研Jenny

考研结束,专业819信号系统与信号处理140,总分420,终于梦圆交大,高考时敢都不敢想目标,现在已经成为现实,考研后劲很大,这一年的复习经历,还是历历在目,整理一下&#xff…...

电子信息工程自动化 单片机自动门控制系统设计

摘 要 伴随着社会经济的发展进步、科学技术的发展进步以及人民群众日常生活质量的逐渐提升,自动门开始全面进入人民群众的生活,逐渐发展成为了宾馆、大型超市、政府等当代建筑里必须配备的设备,是建筑自动智能化综合水平的主要标准之一。它具…...

T C P

文章目录 基于UDP应用场景 TCP协议TCP 协议段格式确认应答机制16位窗口大小 下定义32位序号和32位确认序号 基于UDP应用场景 UDP,tcp这样的协议根本不是直接谈UDP。tcp的应用场景,一定是上层写了应用层协议,所以才有UDP协议的应用场景。 比…...

PDF与PDF/A的区别及如何使用Python实现它们之间的相互转换

目录 概述 PDF/A 是什么?与 PDF 有何不同? 用于实现 PDF 与 PDF/A 相互转换的 Python 库 Python 实现 PDF 转 PDF/A 将 PDF 转换为 PDF/A-1a 将 PDF 转换为 PDF/A-1b 将 PDF 转换为 PDF/A-2a 将 PDF 转换为 PDF/A-2b 将 PDF 转换为 PDF/A-3a 将…...

【Linux课程学习】: 进程地址空间,小故事理解虚拟地址,野指针

🎁个人主页:我们的五年 🔍系列专栏:Linux课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux学习笔记: https://blog.csdn.net/…...

解决el-select数据量过大的3种方法

在准备上线的后台管理系统中,我们发现有两个下拉框(select),其选项数据量超过 1 万条,而在测试环境中这些数据量只有几百条。这导致在页面加载时,浏览器性能出现瓶颈,页面卡顿甚至崩溃。 想了一…...

速盾:高防cdn预热指定url就只刷新这个吗?

高防CDN预热是指在网站上线或更新之前,将网站内容缓存到CDN节点服务器上,以提高用户访问网站的速度和稳定性。通常,预热可以通过指定URL来进行,而不是刷新整个网站。 预热指定URL的好处是可以选择性地进行缓存刷新,而…...

aarch64-linux-gnu-g++在windous不能用

aarch64-linux-gnu-g 是针对 ARM 64 位架构(aarch64)的交叉编译器,它通常用于在一个平台(例如 x86 的 Linux 系统)上为另一个平台(例如 ARM 设备)编译代码。aarch64-linux-gnu-g 是 Linux 环境下…...

01_Node.js入门 (黑马)

01_Node.js入门 知识点自测 从 index.js 出发&#xff0c;访问到 student/data.json 的相对路径如何写? A&#xff1a;../public/teacher/data.json B&#xff1a;./public/student/data.json C&#xff1a;../student/data.json <details><summary>答案</sum…...

记一次搞校园网的经历

接教室的校园网&#xff0c;到另一个屋子玩电脑&#xff0c;隔墙想放大一下AP的信号&#xff0c;发现死活不行 这是现状 由于校园网认证的存在&#xff0c;无法用桥接&#xff0c;桥接需要路由器有IP&#xff0c;而这个IP无法用未刷机的路由器来打开校园网页面认证 解决 将一…...

软件测试中的bug管理:高效定位、跟踪与修复全流程解析

在软件测试全生命周期中&#xff0c;bug管理是保障产品质量、提升开发效率的核心环节。从bug的精准定位到全流程跟踪&#xff0c;再到最终的有效修复&#xff0c;每一个步骤都需要专业的方法、工具与团队协作。对于软件测试从业者而言&#xff0c;掌握科学的bug管理体系&#x…...

嵌入式Linux USB Gadget ADB调试通道实现与深度解析

1. 项目概述&#xff1a;从零构建嵌入式设备的USB ADB调试通道在嵌入式Linux开发中&#xff0c;调试手段的便捷性直接决定了开发效率。传统的串口调试虽然稳定&#xff0c;但在传输大文件、执行复杂命令时&#xff0c;速度和灵活性都显得捉襟见肘。而Android Debug Bridge&…...

0基础装完龙虾不知道干嘛?用15分钟帮你激活造物主身份

这个 skill&#xff0c;由惊风制作&#xff0c;前后打磨了一个多月。 它解决的不是“怎么安装 OpenClaw”&#xff0c;而是一个更核心的问题&#xff1a;为什么很多人装完以后&#xff0c;Agent 依然像个空壳。一、为什么会有 king.skill&#xff1f;很多人第一次装完 OpenClaw…...

利用 AsyncOpenAI 与 asyncio.gather 实现批量问题的高效并发处理

1. 为什么需要异步处理批量问题&#xff1f; 想象一下你开了一家奶茶店&#xff0c;顾客排着长队点单。如果每次只服务一个顾客&#xff0c;等做完他的奶茶才接待下一位&#xff0c;队伍会越排越长。这就是同步请求的困境——每个查询必须等待前一个完成才能开始。当我们需要同…...

Taotoken的Token Plan套餐在实际开发中的节省效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken的Token Plan套餐在实际开发中的节省效果 1. 理解Token Plan的计费模式 在开发过程中&#xff0c;大模型API的调用成本是…...

从蝴蝶效应到股票市场:用Python重现洛伦兹系统,并计算其李雅普诺夫指数谱

从蝴蝶效应到金融混沌&#xff1a;Python实战洛伦兹系统与李雅普诺夫指数谱分析 混沌理论中那句著名的"巴西蝴蝶扇动翅膀可能引发德克萨斯州的龙卷风"&#xff0c;如今已成为跨学科研究的经典隐喻。而在金融市场上&#xff0c;微小信息引发的资产价格剧烈波动与之惊人…...

【亲测免费】【免费下载】 探索视觉新边界:RexVision视觉框架深度解析

探索视觉新边界&#xff1a;RexVision视觉框架深度解析 【下载地址】RexVision视觉框架下载仓库 本仓库提供了一个名为“RexVision视觉框架”的资源文件下载。该框架是一个视觉处理相关的工具或库&#xff0c;用户只需将文件放置在D盘的根目录下即可进行编译和使用 项目地址:…...

《Kubernetes应用篇:使用Helm工具部署mongodb 8.2.7副本集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《K8S集群运维指南》 一、简介 使用Helm结合Bitnami Chart是部署生产级mongodb到Kubernetes集群的事实标准方案。整个过程高度自动化,可以极大地简化运维复杂度。 在实际生产环境中,为了保障稳定运…...

用Python实现编译器前端:从Kaleidoscope到LLVM IR的实践指南

1. 项目概述&#xff1a;从“玩具”到“宝藏”的编译器学习之旅如果你对编译原理这门计算机科学的“硬核”课程感到既敬畏又头疼&#xff0c;觉得那些词法分析、语法树、中间代码优化等概念如同天书&#xff0c;那么你很可能已经尝试过一些经典的“龙书”配套项目&#xff0c;比…...

从L0到L3的完整路径,Token降61%的底层逻辑,TencentDB Agent Memory实战:分层记忆架构详解

TencentDB Agent Memory实战&#xff1a;分层记忆架构详解 副标题: 从L0到L3的完整路径&#xff0c;Token降61%的底层逻辑痛点&#xff1a;为什么你的AI总是"记不住"&#xff1f; 你有没有遇到过这样的情况&#xff1a; AI能记住前几轮对话&#xff0c;但聊久了就&qu…...