projects
/
percentcodec
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
CacheControlInterceptor prüft ETag jetzt auch, wenn If-Modified-Since fehlt
[percentcodec]
/
utils
/
cachecontrol
/
src
/
main
/
java
/
de
/
halbekunst
/
utils
/
cachecontrol
/
CacheControlInterceptor.java
diff --git
a/utils/cachecontrol/src/main/java/de/halbekunst/utils/cachecontrol/CacheControlInterceptor.java
b/utils/cachecontrol/src/main/java/de/halbekunst/utils/cachecontrol/CacheControlInterceptor.java
index
54a14de
..
088e775
100644
(file)
--- a/
utils/cachecontrol/src/main/java/de/halbekunst/utils/cachecontrol/CacheControlInterceptor.java
+++ b/
utils/cachecontrol/src/main/java/de/halbekunst/utils/cachecontrol/CacheControlInterceptor.java
@@
-65,7
+65,14
@@
public class CacheControlInterceptor implements HandlerInterceptor {
return true;
}
return true;
}
- long ifModifiedSince = request.getDateHeader(HEADER_IF_MODIFIED_SINCE);
+ long ifModifiedSince = -1;
+ try {
+ ifModifiedSince = request.getDateHeader(HEADER_IF_MODIFIED_SINCE);
+ }
+ catch (Exception e) {
+ log.error("Exception while fetching If-Modified-Since: {}", e);
+ }
+
long lastModified = cacheable.getLastModified(request);
/**
long lastModified = cacheable.getLastModified(request);
/**
@@
-89,11
+96,14
@@
public class CacheControlInterceptor implements HandlerInterceptor {
}
}
- if (ifModifiedSince >= lastModified) {
+ if (ifModifiedSince >= lastModified
&& lastModified > 0
) {
/**
* request.getDateHeader liefert die Zeit als long, oder -1, wenn der
* Header nicht existiert. D.h., wenn "If-Modified-Since" nicht gesetzt
* ist, wird die komplette Seite ausgeliefert.
/**
* request.getDateHeader liefert die Zeit als long, oder -1, wenn der
* Header nicht existiert. D.h., wenn "If-Modified-Since" nicht gesetzt
* ist, wird die komplette Seite ausgeliefert.
+ * Der zusätzliche Test, ob lastModified größer 0 ist, ist nötig, um
+ * Fehler auszuschließen, wenn die Implementierung von Cachable
+ * negative Werte für Last-Modified zurückliefert.
*/
if (log.isDebugEnabled())
log.debug("Not modified since {}: {}", new Date(ifModifiedSince), request.getRequestURI());
*/
if (log.isDebugEnabled())
log.debug("Not modified since {}: {}", new Date(ifModifiedSince), request.getRequestURI());
@@
-104,20
+114,19
@@
public class CacheControlInterceptor implements HandlerInterceptor {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return false;
}
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return false;
}
- else {
- if (ifNoneMatch.equals(eTag)) {
- log.debug("ETag {} not changed: 304 {}", ifNoneMatch, request.getRequestURI());
- response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
- return false;
- }
- }
+ }
+
+ if (ifNoneMatch != null && ifNoneMatch.equals(eTag)) {
+ log.debug("{}: ETag {} not changed -> 304 ", request.getRequestURI(), ifNoneMatch);
+ response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+ return false;
}
/** HTTP/1.1-Caching-Header richtig setzen!! */
response.setDateHeader(HEADER_LAST_MODIFIED, lastModified);
/** Cache-Control für HTTP/1.1-Clients generieren */
}
/** HTTP/1.1-Caching-Header richtig setzen!! */
response.setDateHeader(HEADER_LAST_MODIFIED, lastModified);
/** Cache-Control für HTTP/1.1-Clients generieren */
- Map<String, String> cacheControl = new HashMap<String, String>(cacheable.getCacheControl
l
(request));
+ Map<String, String> cacheControl = new HashMap<String, String>(cacheable.getCacheControl(request));
/**
* Wenn eins JSESSIONID in der URL enthalten ist, darf die Anfrage nur vom
/**
* Wenn eins JSESSIONID in der URL enthalten ist, darf die Anfrage nur vom
@@
-147,7
+156,7
@@
public class CacheControlInterceptor implements HandlerInterceptor {
* zurückgeliefert werden!
*
* Den Wert als <code>max-age</code> zu den Schlüssel-Wert-Paaren für den
* zurückgeliefert werden!
*
* Den Wert als <code>max-age</code> zu den Schlüssel-Wert-Paaren für den
- * <code>Cache-Control
l
</code>-Header hinzufügen und einen entsprechenden
+ * <code>Cache-Control</code>-Header hinzufügen und einen entsprechenden
* <code>Expires</code>-Header für HTTP/1.0-Clients setzen.
*/
cacheControl.put("max-age", Integer.toString(cacheSeconds));
* <code>Expires</code>-Header für HTTP/1.0-Clients setzen.
*/
cacheControl.put("max-age", Integer.toString(cacheSeconds));
@@
-166,7
+175,7
@@
public class CacheControlInterceptor implements HandlerInterceptor {
}
return true;
}
return true;
- }
+
}
catch (ClassCastException e) {
return true;
}
catch (ClassCastException e) {
return true;
}