Spaces:
Running
Running
Download backend/app/core/headers.py from Aynkhn/Face-Expression-Analyzer: direct link, hf CLI and curl.
- Browser
- Download file 1.82 kB
-
https://huggingface.co/spaces/Aynkhn/Face-Expression-Analyzer/resolve/main/backend/app/core/headers.py
- Command line
-
hf download hf://spaces/Aynkhn/Face-Expression-Analyzer/backend/app/core/headers.py
-
curl -L -o headers.py https://huggingface.co/spaces/Aynkhn/Face-Expression-Analyzer/resolve/main/backend/app/core/headers.py
1.82 kB
| """Cross-origin isolation headers for the served frontend. | |
| ``next.config.ts`` declares these headers, but ``headers()`` is a no-op under | |
| ``output: 'export'`` -- there is no Next server in the container to apply them, and | |
| ``next build`` says so explicitly. MediaPipe's threaded WASM backend needs cross-origin | |
| isolation, so the headers have to come from whatever actually serves the bundle, which | |
| is this application. | |
| Because the WASM and model files are self-hosted under the exported bundle rather than | |
| fetched from a CDN, ``require-corp`` is safe here: there is no cross-origin subresource | |
| left to be blocked. | |
| """ | |
| from __future__ import annotations | |
| from collections.abc import Awaitable, Callable | |
| from starlette.middleware.base import BaseHTTPMiddleware | |
| from starlette.requests import Request | |
| from starlette.responses import Response | |
| SECURITY_HEADERS = { | |
| # Required together to make the page cross-origin isolated, which is what | |
| # unlocks SharedArrayBuffer for MediaPipe's threaded backend. | |
| "Cross-Origin-Opener-Policy": "same-origin", | |
| "Cross-Origin-Embedder-Policy": "require-corp", | |
| "X-Content-Type-Options": "nosniff", | |
| "Referrer-Policy": "strict-origin-when-cross-origin", | |
| } | |
| class SecurityHeadersMiddleware(BaseHTTPMiddleware): | |
| """Apply the isolation and hardening headers to every response.""" | |
| async def dispatch( | |
| self, | |
| request: Request, | |
| call_next: Callable[[Request], Awaitable[Response]], | |
| ) -> Response: | |
| response = await call_next(request) | |
| for header, value in SECURITY_HEADERS.items(): | |
| response.headers.setdefault(header, value) | |
| # Same-origin subresources must opt in explicitly once COEP is on. | |
| response.headers.setdefault("Cross-Origin-Resource-Policy", "same-origin") | |
| return response | |