Skip to content

Commit ed34ea4

Browse files
committed
Reset Expires HTTP header when caching configured
Just like SPR-13252 addressed this issue for the "Pragma" header, this issue resets the HTTP 1.0 "Expires" header. When such a header has been set (by a filter, for example) and HTTP caching has been configured at the WebContentGenerator, this header value is reset to "". In this case, "Cache-Control" and "Expires" might have inconsistent values and we consider that the HTTP caching configuration should take precedence. Depending on the servlet container chosen to deploy the application, this might result in empty "" header values or no header set at all. Issue: SPR-14053 Cherry picked from 15fe827
1 parent 2267b14 commit ed34ea4

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,10 @@ protected final void applyCacheControl(HttpServletResponse response, CacheContro
339339
// Reset HTTP 1.0 Pragma header if present
340340
response.setHeader(HEADER_PRAGMA, "");
341341
}
342+
if (response.containsHeader(HEADER_EXPIRES)) {
343+
// Reset HTTP 1.0 Expires header if present
344+
response.setHeader(HEADER_EXPIRES, "");
345+
}
342346
}
343347
}
344348

@@ -463,6 +467,10 @@ protected final void cacheForSeconds(HttpServletResponse response, int seconds,
463467
// HTTP 1.0 header
464468
response.setDateHeader(HEADER_EXPIRES, System.currentTimeMillis() + seconds * 1000L);
465469
}
470+
else if (response.containsHeader(HEADER_EXPIRES)) {
471+
// Reset HTTP 1.0 Expires header if present
472+
response.setHeader(HEADER_EXPIRES, "");
473+
}
466474

467475
if (this.useCacheControlHeader) {
468476
// HTTP 1.1 header

spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/WebContentInterceptorTests.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.web.servlet.mvc;
1818

19+
import static org.hamcrest.Matchers.is;
1920
import static org.junit.Assert.*;
2021

2122
import java.util.Properties;
@@ -104,32 +105,34 @@ public void emptyCacheConfiguration() throws Exception {
104105
assertThat(cacheControlHeaders, Matchers.emptyIterable());
105106
}
106107

107-
// SPR-13252
108+
// SPR-13252, SPR-14053
108109
@Test
109110
public void cachingConfigAndPragmaHeader() throws Exception {
110111
WebContentInterceptor interceptor = new WebContentInterceptor();
111112
interceptor.setCacheSeconds(10);
112113
response.setHeader("Pragma", "no-cache");
114+
response.setHeader("Expires", "0");
113115

114116
interceptor.preHandle(request, response, null);
115117

116-
Iterable<String> pragmaHeaders = response.getHeaders("Pragma");
117-
assertThat(pragmaHeaders, Matchers.contains(""));
118+
assertThat(response.getHeader("Pragma"), is(""));
119+
assertThat(response.getHeader("Expires"), is(""));
118120
}
119121

120-
// SPR-13252
122+
// SPR-13252, SPR-14053
121123
@SuppressWarnings("deprecation")
122124
@Test
123125
public void http10CachingConfigAndPragmaHeader() throws Exception {
124126
WebContentInterceptor interceptor = new WebContentInterceptor();
125127
interceptor.setCacheSeconds(10);
126128
interceptor.setAlwaysMustRevalidate(true);
127129
response.setHeader("Pragma", "no-cache");
130+
response.setHeader("Expires", "0");
128131

129132
interceptor.preHandle(request, response, null);
130133

131-
Iterable<String> pragmaHeaders = response.getHeaders("Pragma");
132-
assertThat(pragmaHeaders, Matchers.contains(""));
134+
assertThat(response.getHeader("Pragma"), is(""));
135+
assertThat(response.getHeader("Expires"), is(""));
133136
}
134137

135138
@SuppressWarnings("deprecation")

0 commit comments

Comments
 (0)