| """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-cache") |
| 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 |
|
|