中间人: 中间件与 CORS
中间件:Middleware 和 CORS
Section titled “中间件:Middleware 和 CORS”什么是 Middleware?
Section titled “什么是 Middleware?”Middleware 是一个函数,它在任何特定路径操作处理请求之前处理每个请求,并在响应返回之前处理每个响应。它位于客户端和应用程序逻辑之间。
您可以使用 Middleware 来:
- 修改或检查请求头。
- 处理请求体。
- 测量执行时间。
- 记录请求。
- 修改响应头。
创建自定义 Middleware
Section titled “创建自定义 Middleware”要在 FastAPI 中创建 Middleware,您可以使用 @app.middleware("http") 装饰器。Middleware 函数接受两个参数:request 对象和 call_next 函数。
call_next 函数会将请求传递给相应的路径操作,并返回由它生成的响应。
import timefrom fastapi import FastAPI, Request
app = FastAPI()
@app.middleware("http")async def add_process_time_header(request: Request, call_next): start_time = time.time()
# 将请求传递给路径操作 response = await call_next(request)
# 计算所用时间 process_time = time.time() - start_time
# 向响应添加自定义请求头 response.headers["X-Process-Time"] = str(process_time) return response理解 CORS(跨域资源共享)
Section titled “理解 CORS(跨域资源共享)”最常见的 Middleware 要求之一是处理 CORS。如果您的前端(例如 React 应用程序)运行在 http://localhost:3000 上,而您的 FastAPI 后端运行在 http://localhost:8000 上,出于安全原因,Web 浏览器默认会阻止前端到后端的请求。这被称为同源策略。
为了允许您的前端与后端通信,您必须明确配置 CORS,以告知浏览器哪些源(域)被允许访问您的 API。
实现 CORSMiddleware
Section titled “实现 CORSMiddleware”FastAPI 提供了一个内置的 CORSMiddleware 来轻松处理这个问题。您应该将其作为第一个 Middleware 添加,以确保它能正确捕获 OPTIONS 请求。
from fastapi.middleware.cors import CORSMiddleware
origins = [ "http://localhost.tiangolo.com", "https://localhost.tiangolo.com", "http://localhost", "http://localhost:8080",]
app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"],)在此配置中:
- allow_origins:允许发出请求的源列表。您可以使用
["*"]允许所有源,但指定列表更安全。 - allow_methods:允许的 HTTP 方法(GET、POST 等)。
["*"]允许所有方法。 - allow_headers:允许的特定 HTTP 请求头。