Tile-Server: HEAD-Support für /tiles (Dateigröße-Probe ohne 405)
This commit is contained in:
parent
bdadde8b98
commit
e5a2953a80
1 changed files with 6 additions and 1 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue