fix(cache): move Cache-Control middleware before mounts using @app.middleware decorator
This commit is contained in:
+7
-9
@@ -1,8 +1,7 @@
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import FastAPI, Request, Response
|
||||
from fastapi import FastAPI
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from starlette.middleware.base import BaseHTTPMiddleware
|
||||
|
||||
from app.config import UPLOAD_DIR
|
||||
from app.database import init_db
|
||||
@@ -11,20 +10,19 @@ from app.routers import web, api
|
||||
app = FastAPI(title="Mailova 星笺")
|
||||
|
||||
UPLOAD_DIR.mkdir(exist_ok=True)
|
||||
app.mount("/static", StaticFiles(directory=str(Path(__file__).resolve().parent / "static")), name="static")
|
||||
app.mount("/uploads", StaticFiles(directory=str(UPLOAD_DIR)), name="uploads")
|
||||
|
||||
|
||||
# Browser cache: 30 days for uploaded images (they never change)
|
||||
class CacheControlMiddleware(BaseHTTPMiddleware):
|
||||
async def dispatch(self, request: Request, call_next):
|
||||
response: Response = await call_next(request)
|
||||
# Cache-Control for uploaded images (30 days, immutable — filenames contain UUID)
|
||||
@app.middleware("http")
|
||||
async def cache_control_middleware(request, call_next):
|
||||
response = await call_next(request)
|
||||
if request.url.path.startswith("/uploads/"):
|
||||
response.headers["Cache-Control"] = "public, max-age=2592000, immutable"
|
||||
return response
|
||||
|
||||
|
||||
app.add_middleware(CacheControlMiddleware)
|
||||
app.mount("/static", StaticFiles(directory=str(Path(__file__).resolve().parent / "static")), name="static")
|
||||
app.mount("/uploads", StaticFiles(directory=str(UPLOAD_DIR)), name="uploads")
|
||||
|
||||
app.include_router(web.router)
|
||||
app.include_router(api.router)
|
||||
|
||||
Reference in New Issue
Block a user