0

0

解决 Flask 中 Axios POST 请求的 CORS 错误

花韻仙語

花韻仙語

发布时间:2025-09-07 12:48:13

|

498人浏览过

|

来源于php中文网

原创

解决 flask 中 axios post 请求的 cors 错误

本文旨在解决在使用 Flask 作为后端,React 作为前端时,由于 CORS (跨域资源共享) 策略导致的 Axios POST 请求失败的问题。文章将分析常见原因,并提供一种通过切换到 FastAPI 框架来规避此问题的解决方案,同时简要介绍 FastAPI 中 CORS 的配置方法。

CORS 错误排查与 Flask 的局限性

跨域资源共享 (CORS) 是一种浏览器安全机制,用于限制网页从与自身不同源的服务器请求资源。当你的前端 (例如,运行在 http://localhost:3001 的 React 应用) 向后端 (例如,运行在 http://localhost:5000 的 Flask 应用) 发送请求时,如果后端没有正确配置 CORS,浏览器会阻止该请求,并显示类似 "No 'Access-Control-Allow-Origin' header is present on the requested resource" 的错误。

即使你已经在 Flask 中使用了 flask_cors 库,仍然可能遇到 CORS 问题。这可能是由于以下原因:

  • 配置不正确: 确保你的 flask_cors 配置正确,允许来自你的前端域的请求。
  • 请求头不匹配: 某些请求头 (例如 Content-Type: application/json) 可能会触发浏览器的预检请求 (preflight request),如果后端没有正确处理预检请求,也会导致 CORS 错误。
  • 其他中间件冲突: 其他中间件可能干扰 flask_cors 的工作。

切换到 FastAPI:一种更简洁的解决方案

虽然在 Flask 中配置 CORS 可以解决问题,但有时可能会比较繁琐。一个更简洁的替代方案是使用 FastAPI 框架。FastAPI 具有内置的 CORS 支持,配置起来更加简单直观。

以下是如何在 FastAPI 中配置 CORS 的示例代码:

你好星识
你好星识

你的全能AI工作空间

下载
from fastapi import FastAPI, File, UploadFile
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse

app = FastAPI()

origins = [
    "*",  # 允许所有来源,生产环境不建议使用
    # "http://localhost:3000",  # 允许特定来源
    # "https://your-domain.com",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],  # 允许所有方法
    allow_headers=["*"],  # 允许所有头部
)

@app.post("/process")
async def process(image: UploadFile = File(...)):
    print('process')
    # 在这里处理图像
    return JSONResponse({"response": "OK"})

代码解释:

  1. 导入必要的模块: 导入 FastAPI, File, UploadFile, CORSMiddleware 和 JSONResponse。
  2. 创建 FastAPI 应用实例: app = FastAPI() 创建一个 FastAPI 应用实例。
  3. 配置 CORS 中间件:
    • origins:定义允许的来源列表。在开发环境中,可以使用 "*" 允许所有来源。注意:在生产环境中,强烈建议只允许特定的来源,以提高安全性。
    • allow_credentials:设置为 True 以允许跨域请求携带凭据 (例如 cookies)。
    • allow_methods:定义允许的 HTTP 方法列表。"*" 允许所有方法 (GET, POST, PUT, DELETE 等)。
    • allow_headers:定义允许的请求头列表。"*" 允许所有头部。
  4. 添加 CORS 中间件: 使用 app.add_middleware() 将 CORSMiddleware 添加到 FastAPI 应用中。
  5. 定义路由 使用 @app.post("/process") 定义一个 POST 请求的路由。在这个例子中,它接收一个名为 image 的文件上传。
  6. 处理请求: 在 process 函数中,你可以处理上传的图像,并返回一个 JSON 响应。

注意事项:

  • 在生产环境中,绝对不要将 origins 设置为 "*",因为它会允许任何来源的请求,从而带来安全风险。应该只允许你信任的特定来源。
  • 根据你的具体需求,调整 allow_methods 和 allow_headers 的值。
  • 确保你的前端代码发送的请求头与后端配置的 allow_headers 匹配。

总结

虽然在 Flask 中配置 CORS 也能解决问题,但使用 FastAPI 可以更轻松地实现 CORS 配置。通过简单地添加 CORSMiddleware,你可以快速解决跨域问题,并专注于你的业务逻辑。 如果你正在构建一个新的 API,或者在 Flask 中遇到难以解决的 CORS 问题,不妨考虑切换到 FastAPI。

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

85

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

71

2025.12.15

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

177

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

212

2025.12.18

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.6万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

React核心原理新老生命周期精讲
React核心原理新老生命周期精讲

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号