在使用 FastAPI 时,如果你需要处理跨域请求(CORS, Cross-Origin Resource Sharing),可以通过 `fastapi.middleware.cors` 模块来配置跨域设置。以下是如何在 FastAPI 中解决跨域问题的步骤:
### 1. 导入 `CORSMiddleware`
首先,你需要从 `fastapi.middleware.cors` 模块中导入 `CORSMiddleware`。
```python
from fastapi.middleware.cors import CORSMiddleware
```
### 2. 配置 `CORSMiddleware`
在你的 FastAPI 应用中,通过 `app.add_middleware` 方法添加 `CORSMiddleware`,并配置允许的源、方法、头部等信息。
```python
from fastapi import FastAPI
app = FastAPI()
# 允许所有源
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 允许所有源,或者指定特定的源,如 ["https://example.com"]
allow_credentials=True, # 允许跨域请求携带凭证(如 cookies)
allow_methods=["*"], # 允许所有 HTTP 方法,或者指定特定的方法,如 ["GET", "POST"]
allow_headers=["*"], # 允许所有 HTTP 头部,或者指定特定的头部
)
```
### 3. 配置详解
- `allow_origins`: 允许跨域请求的来源。可以是一个字符串列表,例如 `["https://example.com", "https://another-domain.com"]`,或者使用 `["*"]` 允许所有来源。
- `allow_credentials`: 是否允许跨域请求携带凭证(如 cookies)。如果设置为 `True`,`allow_origins` 不能为 `["*"]`,必须指定具体的源。
- `allow_methods`: 允许的 HTTP 方法。可以是一个字符串列表,例如 `["GET", "POST"]`,或者使用 `["*"]` 允许所有方法。
- `allow_headers`: 允许的 HTTP 头部。可以是一个字符串列表,例如 `["X-Custom-Header"]`,或者使用 `["*"]` 允许所有头部。
### 4. 示例代码
以下是一个完整的示例代码:
```python
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# 配置 CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["https://example.com"], # 允许特定的源
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE"], # 允许特定的方法
allow_headers=["X-Custom-Header"], # 允许特定的头部
)
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
```
### 5. 测试跨域请求
你可以使用浏览器或工具(如 Postman 或 curl)来测试跨域请求,确保配置生效。
### 6. 注意事项
- 如果你允许所有来源(`allow_origins=["*"]`),则不能同时设置 `allow_credentials=True`,因为这会导致安全问题。
- 在生产环境中,建议明确指定允许的来源,而不是使用 `["*"]`。
通过以上步骤,你可以在 FastAPI 中轻松解决跨域问题。