中间件与CORS(基于fastapi)

中间件与CORS

中间件

中间件是一个函数,它在每个请求被特定路径操作处理之前,以及每个响应之后操作。

简单来说,中间件可以看作是请求和响应之间的一个处理层,可以用来实现一些通用的功能,比如日志记录、身份验证、请求修改等。

python 复制代码
from fastapi import FastAPI,Request, Response
import time
import uvicorn

app = 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等)在一个网页上被另一个域的网页访问。

  • 手写的
python 复制代码
@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
python 复制代码
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有来源
    allow_credentials=True, # 允许携带凭证
    allow_methods=["*"],  # 允许所有方法
    allow_headers=["*"],  # 允许所有请求头
)
相关推荐
真上帝的左手2 天前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
9624562 天前
容器 RUNNING,为什么中间件仍不可用?ActiveMQ 与 Kafka/ZooKeeper 恢复实录
中间件·kafka·activemq
真上帝的左手2 天前
30. 技术专题-‌应用框架组件-缓存-Redis
数据库·redis·分布式·缓存·中间件
真上帝的左手2 天前
30. 技术专题-‌应用框架组件-搜索引擎-ES
大数据·分布式·elasticsearch·搜索引擎·中间件
一枕槐安4872 天前
Qwen 通义千问本地部署与推理服务封装
fastapi·qwen·vllm·流式推理·openai兼容api·awq量化
在努力的前端小白3 天前
基于FastAPI+LangChain+LangGraph+Agent+多模态的AI Agent 有渔渔具网站
人工智能·langchain·vue·fastapi
kingx33 天前
BugKu PRA 渗透测试 2(Harry‘s Blog):9 Flag 全链实战复盘
中间件·渗透测试·log4j2·内网渗透·反序列化
sun_weitao3 天前
用 FastAPI + MQTT 做一个 ESP32最小化跑通示例
中间件·vue·fastapi
峯5803 天前
一文学习FastAPI
学习·fastapi
真上帝的左手3 天前
12. 消息队列-Kafka进阶
分布式·中间件·kafka