microdot.cors — Partilha de Recursos entre Origens (CORS)¶
Adiciona os cabeçalhos necessários para que o navegador permita que JavaScript em execução numa origem chame os endpoints alojados na câmara a partir de uma origem diferente. A classe associa-se ao handler OPTIONS da aplicação (para pedidos preflight) e ao hook pós-pedido (para os cabeçalhos Access-Control-* nas respostas normais).
class CORS¶
- class microdot.cors.CORS(app: Microdot | None = None, allowed_origins=None, allow_credentials: bool = False, allowed_methods: list | None = None, expose_headers: list | None = None, allowed_headers: list | None = None, max_age: int | None = None, handle_cors: bool = True)¶
- app
A instância de
microdot.Microdotà qual se associa. Pode serNonepara diferir a associação; nesse caso, chameinitialize()mais tarde.- allowed_origins
Uma lista de cadeias de origem (
["https://app.example.com"]) ou o literal'*'para permitir qualquer origem. As origens que não correspondam a esta lista não recebem cabeçalhos CORS, o que o navegador interpreta como «este pedido não é permitido».- allow_credentials
Se
True, adicionaAccess-Control-Allow-Credentials: truepara que o navegador envie cookies e cabeçalhos de autenticação em pedidos entre origens. Não pode ser utilizado comallowed_origins='*'em pedidos que necessitem de credenciais (os navegadores rejeitam essa combinação).- allowed_methods
Lista de métodos (
['GET', 'POST']) que o navegador pode utilizar entre origens.Nonesignifica qualquer método.- expose_headers
Lista de nomes de cabeçalhos de resposta que o navegador pode expor ao JavaScript.
- allowed_headers
Lista de nomes de cabeçalhos de pedido que os clientes podem incluir em pedidos entre origens.
Nonesignifica qualquer um (replica oAccess-Control-Request-Headersdo preflight).- max_age
Segundos durante os quais o navegador pode colocar em cache o resultado do preflight. Se omitido, o navegador revalida cada preflight.
- handle_cors
Se
False, a classe fica configurada mas não se associa efetivamente — útil quando se pretende combinar manualmente o resultado deget_cors_headers()com outro middleware.
- get_cors_headers(request) dict¶
Calcula o conjunto de cabeçalhos
Access-Control-*que se aplicam a request. Utilizado internamente pelo hook pós-pedido; as aplicações podem chamá-lo diretamente ao emitir cabeçalhos CORS a partir de middleware personalizado.
- allowed_origins: list | str | None¶
A lista de origens configurada, ou o literal
'*'. Espelha o argumento de construção allowed_origins; reatribua em tempo de execução para alterar a política sem reconstruir o objeto.
- allow_credentials: bool¶
Indica se
Access-Control-Allow-Credentials: trueé emitido nos pedidos correspondentes. Espelha o argumento de construção allow_credentials.
- allowed_methods: list | None¶
Lista de nomes de métodos permitidos entre origens, ou
Nonepara «qualquer». Espelha o argumento de construção allowed_methods.
- expose_headers: list | None¶
Lista de cabeçalhos de resposta que o navegador pode expor ao JavaScript, ou
Nonepara omitir o cabeçalhoAccess-Control-Expose-Headers. Espelha o argumento de construção expose_headers.
Exemplo:
from microdot import Microdot
from microdot.cors import CORS
app = Microdot()
CORS(app,
allowed_origins=['https://dashboard.example.com'],
allow_credentials=True,
max_age=86400)
@app.get('/api/status')
async def status(request):
return {'ok': True}
O pedido preflight OPTIONS é tratado automaticamente; a câmara devolve os cabeçalhos Access-Control-* apropriados e 204 No Content. As respostas GET / POST / etc. recebem o cabeçalho Access-Control-Allow-Origin através do hook pós-pedido registado.