Python FastApi 解决跨域及OPTIONS预请求处理

FastAPI 提供了内置的 CORS 中间件,用于处理跨域资源共享(CORS)请求。你可以使用 fastapi.middleware.cors.CORSMiddleware 来启用跨域支持。

OPTIONS 请求的主要意义在于:

  1. 跨域资源共享(CORS)预检请求: 当客户端通过 XMLHttpRequest 或 Fetch API 发送跨域请求时,浏览器会首先发送一个 OPTIONS 请求,以确认服务器是否允许跨域请求。服务器在收到 OPTIONS 请求后,会检查请求头中的相关信息(如 Origin、Access-Control-Request-Method 等),并返回适当的 CORS 头部,以指示是否允许跨域请求。

  2. 查看服务器支持的方法: OPTIONS 请求还可用于查询服务器支持的 HTTP 方法和其他功能。服务器在响应 OPTIONS 请求时,会返回允许的方法(Allow 头部),以便客户端知道可以使用哪些 HTTP 方法进行实际请求。

  3. 测试服务器的性能和可用性: 在某些情况下,OPTIONS 请求也可用于测试服务器的性能和可用性。服务器收到 OPTIONS 请求后,可以执行一些预检操作,并返回适当的响应,以表明服务器的状态。

OPTIONS 请求的主要目的是为了安全地执行跨域请求,并提供服务器支持的 HTTP 方法和其他相关信息。

以下是处理代码示例:

python 复制代码
app = FastAPI() # 2. 创建一个 FastAPI 实例


# 添加CORS中间件
app.add_middleware(
    CORSMiddleware,
    allow_origins=[Config.cors_allowOrigins],
    allow_credentials=True,
    allow_methods=Config.cors_allowMethods, # ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    allow_headers=Config.cors_allowHeaders  #["Origin,Accept,Accept-Language,Authorization,Content-Type,UserCode,Timestamp,Nonce,Signature"],
)

# # 自定义中间件处理 OPTIONS 请求
@app.middleware("http")
async def options_middleware(request: Request, call_next):
    if request.method == "OPTIONS":
        # 返回允许的 HTTP 方法和其他相关头部信息
        headers =  {
            "allow": Config.cors_allowMethods,
            "Access-Control-Allow-Origin":Config.cors_allowOrigins,
            "Access-Control-Allow-Methods": Config.cors_allowMethods,
            "Access-Control-Allow-Headers": Config.cors_allowHeaders,
        }
        return JSONResponse(content=None,status_code=200,headers=headers)
    # 如果不是 OPTIONS 请求,则继续处理请求
    response = await call_next(request)
    return response
相关推荐
小白学大数据9 分钟前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
浊酒南街10 分钟前
TensorFlow之微分求导
人工智能·python·tensorflow
立秋678916 分钟前
用Python绘制梦幻星空
开发语言·python·pygame
alpszero28 分钟前
YOLO11解决方案之对象裁剪探索
人工智能·python·计算机视觉·yolo11
waterHBO1 小时前
直接从图片生成 html
前端·javascript·html
白云千载尽1 小时前
相机、雷达标定工具,以及雷达自动标定的思路
python·自动驾驶·ros
咕噜咕噜啦啦1 小时前
python爬虫实战训练
爬虫·python
盛夏绽放1 小时前
Python字符串常用内置函数详解
服务器·开发语言·python
我想睡觉2611 小时前
Python训练营打卡DAY27
开发语言·python·机器学习
蹦蹦跳跳真可爱5891 小时前
Python----神经网络(基于DNN的风电功率预测)
人工智能·pytorch·python·深度学习·神经网络·dnn