| """Cache control middleware for ComfyUI server"""
|
|
|
| from aiohttp import web
|
| from typing import Callable, Awaitable
|
|
|
|
|
| ONE_HOUR: int = 3600
|
| ONE_DAY: int = 86400
|
| IMG_EXTENSIONS = (
|
| ".jpg",
|
| ".jpeg",
|
| ".png",
|
| ".ppm",
|
| ".bmp",
|
| ".pgm",
|
| ".tif",
|
| ".tiff",
|
| ".webp",
|
| )
|
|
|
|
|
| @web.middleware
|
| async def cache_control(
|
| request: web.Request, handler: Callable[[web.Request], Awaitable[web.Response]]
|
| ) -> web.Response:
|
| """Cache control middleware that sets appropriate cache headers based on file type and response status"""
|
| response: web.Response = await handler(request)
|
|
|
| path_filename = request.path.rsplit("/", 1)[-1]
|
| is_entry_point = path_filename.startswith("index") and path_filename.endswith(
|
| ".json"
|
| )
|
|
|
| if request.path.endswith(".js") or request.path.endswith(".css") or is_entry_point:
|
| response.headers.setdefault("Cache-Control", "no-store")
|
| return response
|
|
|
|
|
| if not request.path.lower().endswith(IMG_EXTENSIONS):
|
| return response
|
|
|
|
|
| if response.status == 404:
|
| response.headers.setdefault("Cache-Control", f"public, max-age={ONE_HOUR}")
|
| elif response.status in (200, 201, 202, 203, 204, 205, 206, 301, 308):
|
|
|
| response.headers.setdefault("Cache-Control", f"public, max-age={ONE_DAY}")
|
| elif response.status in (302, 303, 307):
|
|
|
| response.headers.setdefault("Cache-Control", "no-cache")
|
|
|
|
|
| return response
|
|
|