diff --git a/backend/main.py b/backend/main.py index eb41d18..4d22f8f 100644 --- a/backend/main.py +++ b/backend/main.py @@ -380,7 +380,7 @@ app.mount("/img", StaticFiles(directory=f"{STATIC_DIR}/img"), name="img") # (Range nativ, keine App-CPU) — siehe docs/TILE_SERVER_HANDOVER.md, Entscheidung #2. _TILES_DIR = os.getenv("TILES_DIR", "/data/tiles") -@app.get("/tiles/{filename}") +@app.api_route("/tiles/{filename}", methods=["GET", "HEAD"]) async def serve_tile(filename: str, request: Request): # Kein Path-Traversal if "/" in filename or "\\" in filename or ".." in filename: @@ -390,6 +390,11 @@ async def serve_tile(filename: str, request: Request): return Response(status_code=404) file_size = os.path.getsize(path) base_headers = {"Accept-Ranges": "bytes", "Cache-Control": "public, max-age=86400"} + if request.method == "HEAD": + return Response( + status_code=200, media_type="application/octet-stream", + headers={**base_headers, "Content-Length": str(file_size)}, + ) range_header = request.headers.get("range") if range_header and range_header.startswith("bytes="): rng = range_header[6:].split(",")[0] # nur erster Range (pmtiles nutzt single-range)