microdot.cors — Cross-Origin Resource Sharing¶
Adiciona os cabeçalhos de que um navegador precisa para permitir que JavaScript em execução em uma origem chame seus endpoints hospedados na câmera em uma origem diferente. A classe se conecta ao manipulador OPTIONS da aplicação (para requisições de preflight) e ao hook de pós-requisição (para os cabeçalhos Access-Control-* em 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 anexar. Pode serNonepara adiar a anexação; chameinitialize()posteriormente.- allowed_origins
Uma lista de strings de origem (
["https://app.example.com"]) ou o literal'*'para permitir qualquer origem. Origens que não correspondem a esta lista não recebem cabeçalhos CORS, o que o navegador interpreta como “esta requisição não é permitida”.- allow_credentials
Se
True, adicionaAccess-Control-Allow-Credentials: truepara que o navegador envie cookies e cabeçalhos de autenticação com requisições cross-origin. Não pode ser usado comallowed_origins='*'para qualquer requisição que precise de credenciais (os navegadores rejeitam essa combinação).- allowed_methods
Lista de métodos (
['GET', 'POST']) que o navegador pode usar cross-origin.Nonesignifica qualquer um.- 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 requisição que os clientes podem incluir cross-origin.
Nonesignifica qualquer um (ecoa oAccess-Control-Request-Headersdo preflight).- max_age
Segundos durante os quais o navegador pode armazenar em cache o resultado do preflight. Omiti-lo significa que o navegador revalida cada preflight.
- handle_cors
Se
False, a classe é configurada, mas não se anexa de fato – útil quando você deseja combinar manualmente a saída deget_cors_headers()com outro middleware.
- get_cors_headers(request) dict¶
Calcula o conjunto de cabeçalhos
Access-Control-*que se aplicam a request. Usado internamente pelo hook de pós-requisição; as aplicações podem chamá-lo diretamente ao emitir cabeçalhos CORS a partir de middleware personalizado.
- allowed_origins: list | str | None¶
A lista configurada de origens, ou o literal
'*'. Espelha o argumento de construtor allowed_origins; reatribua em tempo de execução para alterar a política sem reconstruir o objeto.
- allow_credentials: bool¶
Se
Access-Control-Allow-Credentials: trueé emitido em requisições correspondentes. Espelha o argumento de construtor allow_credentials.
- allowed_methods: list | None¶
Lista de nomes de métodos permitidos cross-origin, ou
Nonepara “qualquer um”. Espelha o argumento de construtor 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 construtor 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}
A requisição de preflight OPTIONS é tratada automaticamente; a câmera retorna os cabeçalhos Access-Control-* apropriados e 204 No Content. As respostas reais de GET / POST / etc. recebem o cabeçalho Access-Control-Allow-Origin por meio do hook de pós-requisição registrado.