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 方法和其他相关信息。

以下是处理代码示例:

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

相关推荐

  1. Python FastApi 解决OPTIONS请求处理

    2024-04-30 22:30:06       34 阅读
  2. Golang解决问题【OPTIONS预处理请求

    2024-04-30 22:30:06       60 阅读
  3. SpringCloud中Gateway提示OPTIONS请求问题

    2024-04-30 22:30:06       41 阅读
  4. 问题 解决

    2024-04-30 22:30:06       38 阅读
  5. 一知半解,临时解决ajax请求

    2024-04-30 22:30:06       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 22:30:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 22:30:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 22:30:06       82 阅读
  4. Python语言-面向对象

    2024-04-30 22:30:06       91 阅读

热门阅读

  1. 汇编语言-DIV指令(除法指令)

    2024-04-30 22:30:06       30 阅读
  2. 让新手变中手的ChatGPT 使用方法

    2024-04-30 22:30:06       55 阅读
  3. linux&windowns文件共享之samba

    2024-04-30 22:30:06       30 阅读
  4. python高阶应用

    2024-04-30 22:30:06       32 阅读
  5. 商城数据库88张表

    2024-04-30 22:30:06       26 阅读
  6. linux驱动-CCF-1 provider 注册时钟

    2024-04-30 22:30:06       21 阅读
  7. 自制英语听力视频 4.30

    2024-04-30 22:30:06       28 阅读