From 2bc1f2dace89619c46e7b65d1a3660841ce263cc Mon Sep 17 00:00:00 2001 From: "Blue (Lukas Rieger)" Date: Sat, 18 Jan 2020 13:43:32 +0100 Subject: [PATCH] Add etag handling and cache-control headers to webserver - closes #17 --- .../core/web/BlueMapWebRequestHandler.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/web/BlueMapWebRequestHandler.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/web/BlueMapWebRequestHandler.java index ddd3116a..1f91a663 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/web/BlueMapWebRequestHandler.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/web/BlueMapWebRequestHandler.java @@ -38,6 +38,7 @@ import java.util.Map; import java.util.Set; import java.util.TimeZone; +import java.util.concurrent.TimeUnit; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -160,9 +161,21 @@ private HttpResponse generateResponse(HttpRequest request) { } catch (IllegalArgumentException e){} } - + //check ETag + String eTag = Long.toHexString(file.length()) + Integer.toHexString(file.hashCode()) + Long.toHexString(lastModified); + Set etagStringSet = request.getHeader("If-None-Match"); + if (!etagStringSet.isEmpty()){ + if(etagStringSet.iterator().next().equals(eTag)) { + return new HttpResponse(HttpStatusCode.NOT_MODIFIED); + } + } + + //create response HttpResponse response = new HttpResponse(HttpStatusCode.OK); + response.addHeader("ETag", eTag); if (lastModified > 0) response.addHeader("Last-Modified", timestampToString(lastModified)); + response.addHeader("Cache-Control", "public"); + response.addHeader("Cache-Control", "max-age=" + TimeUnit.HOURS.toSeconds(1)); //add content type header String filetype = file.getName().toString();