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 ser None para adiar a anexação; chame initialize() 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, adiciona Access-Control-Allow-Credentials: true para que o navegador envie cookies e cabeçalhos de autenticação com requisições cross-origin. Não pode ser usado com allowed_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. None significa 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. None significa qualquer um (ecoa o Access-Control-Request-Headers do 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 de get_cors_headers() com outro middleware.

initialize(app: Microdot, handle_cors: bool = True)

Anexa-se a app se a construção foi adiada.

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 None para “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 None para omitir o cabeçalho Access-Control-Expose-Headers. Espelha o argumento de construtor expose_headers.

allowed_headers: list | None

Lista de nomes de cabeçalhos de requisição aceitos cross-origin, em minúsculas, ou None para “ecoar o que o preflight solicitou”. Espelha o argumento de construtor allowed_headers (o construtor converte a lista para minúsculas antes de armazená-la).

max_age: int | None

Segundos durante os quais o navegador pode armazenar em cache a resposta de preflight, ou None para omitir o cabeçalho Access-Control-Max-Age. Espelha o argumento de construtor max_age.

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.