from typing import Callable
from fastapi import Request
from fastapi.responses import Response
def cors_handle_middleware(request: Request, call_next: Callable) -> Response:
"""
跨域处理中间件
"""
if request.method == "OPTIONS":
# options请求不需要走后面的路由
response = Response(content=b"")
response.status_code = 204
else:
response = call_next(request)
# 允许的域名
response.headers["Access-Control-Allow-Origin"] = "*"
# 允许的请求方法
response.headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS"
# 设置cors校验有效时间,单位为秒
response.headers["Access-Control-Max-Age"] = "1728000"
# 设置允许携带的请求头参数
response.headers["Access-Control-Allow-Headers"] = "X-Token,Referer"
# 设置暴露给客户端响应头参数
response.headers["Access-Control-Expose-Headers"] = "X-Token,X-Total-Count"
# 是否允许携带cookies, 如果为true, 则Access-Control-Allow-Origin不能为'*'
# response.headers["Access-Control-Allow-Credentials"] = "true"
return response