microdot.cors — 교차 출처 리소스 공유(CORS)¶
한 출처에서 실행되는 JavaScript가 다른 출처에 있는 카메라 호스팅 엔드포인트를 호출할 수 있도록 브라우저가 필요로 하는 헤더를 추가합니다. 이 클래스는 애플리케이션의 OPTIONS 핸들러(프리플라이트 요청용)와 요청 후 훅(일반 응답의 Access-Control-* 헤더용)에 스스로를 연결합니다.
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
연결할
microdot.Microdot인스턴스. 연결을 미루기 위해None일 수 있으며, 이 경우 나중에initialize()를 호출합니다.- allowed_origins
출처 문자열 목록(
["https://app.example.com"]) 또는 모든 출처를 허용하는 리터럴'*'. 이 목록과 일치하지 않는 출처는 CORS 헤더를 받지 못하며, 브라우저는 이를 “이 요청은 허용되지 않음”으로 해석합니다.- allow_credentials
True이면Access-Control-Allow-Credentials: true를 추가하여 브라우저가 교차 출처 요청에 쿠키와 인증 헤더를 보내도록 합니다. 자격 증명이 필요한 요청에는allowed_origins='*'와 함께 사용할 수 없습니다(브라우저가 이 조합을 거부합니다).- allowed_methods
브라우저가 교차 출처로 사용할 수 있는 메서드 목록(
['GET', 'POST']).None은 모든 메서드를 의미합니다.- expose_headers
브라우저가 JavaScript에 노출할 수 있는 응답 헤더 이름 목록.
- allowed_headers
클라이언트가 교차 출처로 포함할 수 있는 요청 헤더 이름 목록.
None은 모든 헤더를 의미합니다(프리플라이트의Access-Control-Request-Headers를 그대로 반영).- max_age
브라우저가 프리플라이트 결과를 캐시할 수 있는 초 단위 시간. 생략하면 브라우저가 매번 프리플라이트를 다시 검증합니다.
- handle_cors
False이면 클래스가 구성되기는 하지만 실제로 자신을 연결하지는 않습니다.get_cors_headers()출력을 다른 미들웨어와 수동으로 결합하려는 경우에 유용합니다.
- get_cors_headers(request) dict¶
request 에 적용되는
Access-Control-*헤더 집합을 계산합니다. 요청 후 훅이 내부적으로 사용하며, 애플리케이션은 커스텀 미들웨어에서 CORS 헤더를 내보낼 때 직접 호출할 수 있습니다.
- allowed_origins: list | str | None¶
구성된 출처 목록 또는 리터럴
'*'. allowed_origins 생성자 인자를 반영합니다. 객체를 다시 만들지 않고 정책을 변경하려면 런타임에 재할당하십시오.
- allow_credentials: bool¶
일치하는 요청에
Access-Control-Allow-Credentials: true가 내보내지는지 여부. allow_credentials 생성자 인자를 반영합니다.
- allowed_methods: list | None¶
교차 출처로 허용되는 메서드 이름 목록 또는 “모든 메서드”를 의미하는
None. allowed_methods 생성자 인자를 반영합니다.
- expose_headers: list | None¶
브라우저가 JavaScript에 노출할 수 있는 응답 헤더 목록 또는
Access-Control-Expose-Headers헤더를 생략하는None. expose_headers 생성자 인자를 반영합니다.
예시:
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}
프리플라이트 OPTIONS 요청은 자동으로 처리됩니다. 카메라는 적절한 Access-Control-* 헤더와 204 No Content 를 반환합니다. 실제 GET / POST 등의 응답은 등록된 요청 후 훅을 통해 Access-Control-Allow-Origin 헤더를 갖게 됩니다.