FastAPI Middleware e CORS: Configure com Segurança resolve um problema recorrente em projetos Python: Configure a camada entre requisição e resposta e libere apenas as origens necessárias. Este guia mostra o mecanismo, um exemplo executável e os limites que evitam uma implementação frágil.
Conceito e caso de uso
Middleware executa lógica ao redor de cada requisição. CORS é uma política aplicada pelo navegador para controlar chamadas entre origens, isto é, combinações diferentes de esquema, host ou porta.
Para revisar os fundamentos relacionados, consulte também o guia de FastAPI. A integração fica mais simples quando cada função recebe dependências e dados explicitamente, em vez de depender de estado global.
Exemplo prático
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["https://app.example.com"],
allow_credentials=True,
allow_methods=["GET", "POST"],
allow_headers=["Authorization", "Content-Type"],
)
@app.middleware("http")
async def request_id(request: Request, call_next):
response = await call_next(request)
response.headers["X-Request-ID"] = request.headers.get("X-Request-ID", "new")
return response
Use uma lista explícita de origens quando houver cookies ou cabeçalhos Authorization. O curinga não combina com credenciais e amplia uma permissão que deveria refletir os front-ends reais.
Decisões importantes
A escolha correta depende do contrato público, do volume e do comportamento em caso de falha.
Considere como a solução se comporta sob concorrência, entradas vazias e falhas parciais. Documente qualquer limite que afete consumidores e mantenha nomes que expressem a intenção.
Erros comuns
O exemplo mínimo não substitui limites, tratamento de erros e observabilidade. Não confunda CORS com autenticação ou firewall. Ele não impede clientes fora do navegador de chamar a API. Mantenha o middleware curto, preserve exceções e não registre tokens.
Evite capturar exceções sem contexto ou retornar resultados parciais como se fossem completos. Uma falha explícita costuma ser mais segura que dados silenciosamente incorretos.
Como validar
Valide o comportamento, não apenas a linha feliz. Teste a requisição preflight OPTIONS e uma requisição simples a partir de uma origem permitida e outra bloqueada. Confirme headers, status e credenciais.