fastapi 跨域请求

问题描述

在前后端开发中遇到一个问题,前端发送请求后,后端报 'OPTIONS /mock/user/login HTTP/1.1' 405 Method Not Allowed,如下图:

但用fastapi自带的swagger或postman测试又是可以的。

 

定位原因

这是因为在跨域的情况下,在浏览器发起"复杂请求"时主动发起的。跨域共享标准规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求 。服务器确认允许之后,才发起实际的 HTTP 请求。这也明明需要一个POST请求,但是实际浏览器发两次HTTP请求给服务器的原因。

 

解决方案

FastAPI提供了一个名为fastapi.middleware.cors的中间件模块,可用来处理跨域问题。

from fastapi.middleware.cors import CORSMiddleware
from fastapi import FastAPI

app = FastAPI()

# 允许所有来源的跨域请求
app.add_middleware(
    CORSMiddleware,
    # 允许所有来源的跨域请求,你也可以设置为具体的域名来限制请求来源
    allow_origins=["*"],
    # 参数设置为True表示允许携带身份凭证,如cookies
    allow_credentials=True,
    # 表示允许所有HTTP方法的请求
    allow_methods=["*"],
    # 表示允许所有请求头
    allow_headers=["*"]
)

 

posted @ 2024-08-26 10:38  三只松鼠  阅读(348)  评论(0编辑  收藏  举报