* Wenn die Implementierung von Cacheable einen ungültigen (d.h. negativen)
Zeitstempel für Last-Modified geliefert hat, hat CacheControlInterceptor
fälschlich stets mit 304 Not-Modified geantwortet.
* Exception abgefangen, die CacheControlInterceptor geworfen hat, wenn der
Request für If-Modified-Since eine Zeitangabe vor dem 1.1.1970 enthalten
hat.
- 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);
/**
- 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());
catch (ClassCastException e) {
return true;
}
catch (ClassCastException e) {
return true;
}