| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- from urllib.parse import urlparse
- from fastapi.middleware.cors import CORSMiddleware
- from starlette.middleware.base import BaseHTTPMiddleware
- from starlette.types import ASGIApp
- class LocalhostCORSMiddleware(CORSMiddleware):
- """
- Custom CORS middleware that allows any request from localhost/127.0.0.1 domains,
- while using standard CORS rules for other origins.
- """
- def __init__(self, app: ASGIApp, **kwargs) -> None:
- super().__init__(app, **kwargs)
- def is_allowed_origin(self, origin: str) -> bool:
- if origin:
- parsed = urlparse(origin)
- hostname = parsed.hostname or ''
- # Allow any localhost/127.0.0.1 origin regardless of port
- if hostname in ['localhost', '127.0.0.1']:
- return True
- # For missing origin or other origins, use the parent class's logic
- return super().is_allowed_origin(origin)
- class NoCacheMiddleware(BaseHTTPMiddleware):
- """
- Middleware to disable caching for all routes by adding appropriate headers
- """
- async def dispatch(self, request, call_next):
- response = await call_next(request)
- if not request.url.path.startswith('/assets'):
- response.headers['Cache-Control'] = (
- 'no-cache, no-store, must-revalidate, max-age=0'
- )
- response.headers['Pragma'] = 'no-cache'
- response.headers['Expires'] = '0'
- return response
|