当前位置: 首页 > 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中间件、解决跨域报错的步骤以及一个具体的案例。希望这些内容能够帮助你快速解决跨域问题,并提升你的开发效率。

http://www.lryc.cn/news/498740.html

相关文章:

  • git如何新建分支并提交?
  • 使用 LlamaFactory 结合开源大语言模型实现文本分类:从数据集构建到 LoRA 微调与推理评估
  • Python基础学习总结篇
  • 8. Debian系统中显示屏免密码自动登录
  • ubuntu安装nginx并设置开机自启动
  • SQLServer中使用ISNULL替换为指定的替换值
  • 深入浅出:PHP函数的定义与使用
  • C++知识整理day4内存管理——new和delete详解
  • 部署项目报错
  • 专业140+总分420+上海交通大学819考研经验上交电子信息与通信工程,真题,大纲,参考书。博睿泽信息通信考研论坛,信息通信考研Jenny
  • 电子信息工程自动化 单片机自动门控制系统设计
  • T C P
  • PDF与PDF/A的区别及如何使用Python实现它们之间的相互转换
  • 【Linux课程学习】: 进程地址空间,小故事理解虚拟地址,野指针
  • 解决el-select数据量过大的3种方法
  • 速盾:高防cdn预热指定url就只刷新这个吗?
  • aarch64-linux-gnu-g++在windous不能用
  • 01_Node.js入门 (黑马)
  • 记一次搞校园网的经历
  • 沃德云商协系统微信小程序PHP+Uniapp
  • Leecode刷题C语言之可以被进一步捕获的棋子数
  • 【算法】数组中,求K个最大值
  • Postman自定义脚本Pre-request-script以及Test
  • Lua中实现HTTP请求的User-Agent自定义
  • 工业节能水泵如何节能?
  • 第四篇:k8s 理解Service工作原理
  • P3131 [USACO16JAN] Subsequences Summing to Sevens S
  • 大数据技术Kafka详解 ② | Kafka基础与架构介绍
  • 【CKA】Kubernetes(k8s)认证之CKA考题讲解
  • android WebRtc 无法推流以及拉流有视频无声音问题