中间件与CORS(基于fastapi)
中间件与CORS
中间件
中间件是一个函数,它在每个请求被特定路径操作处理之前,以及每个响应之后操作。
简单来说,中间件可以看作是请求和响应之间的一个处理层,可以用来实现一些通用的功能,比如日志记录、身份验证、请求修改等。
from fastapi import FastAPI,Request, Response
import time
import uvicornapp = FastAPI()@app.middleware("http")
async def m2(request:Request, call_next):#请求代码块print("中间件m2被调用")response = await call_next(request)#响应代码块response.headers["Author"]="liu"#添加响应头print("中间件m2响应被调用")return response@app.middleware("http")
async def m1(request:Request, call_next):#请求代码块# if request.client.host in ["127.0.0.1"]:# return Response(status_code=403, content="forbidden")# if request.url.path in ["/user"]:# return Response(status_code=403, content="forbidden")start = time.time()print("中间件m1被调用")response = await call_next(request)#响应代码块end = time.time()response.headers["timer_process"]=str(end - start)print("中间件m1响应被调用")return response@app.get("/user")
async def get_user():print("get_user函数")time.sleep(3)return{"user" : "current user"}@app.get("/item/{item_id}")
async def get_item(item_id: int):print("get_item函数")return{"item_id" : {item_id}}if __name__ == '__main__':uvicorn.run("main:app", port=8000, reload=True)
CORS
跨域资源共享(Cross-Origin Resource Sharing,CORS)是一种机制,它允许受限的资源(如字体、JavaScript等)在一个网页上被另一个域的网页访问。
- 手写的
@app.middleware("http")
async def CORSMiddleware(request: Request, call_next):response = await call_next(request)response.headers["Access-Control-Allow-Origin"] = "*"return response
- 使用FastAPI内置的CORSMiddleware
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(CORSMiddleware,allow_origins=["*"], # 允许所有来源allow_credentials=True, # 允许携带凭证allow_methods=["*"], # 允许所有方法allow_headers=["*"], # 允许所有请求头
)