Tile-Server: HEAD-Support für /tiles (Dateigröße-Probe ohne 405)

This commit is contained in:
rene 2026-06-04 20:35:06 +02:00
parent bdadde8b98
commit e5a2953a80

View file

@ -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)