/** * Set a configured {@link CacheControl} instance as the * new value of the {@code Cache-Control} header. * @since 5.0.5 */ public void setCacheControl(CacheControl cacheControl) { setOrRemove(CACHE_CONTROL, cacheControl.getHeaderValue()); }
/** * Set the HTTP Cache-Control header according to the given settings. * @param response current HTTP response * @param cacheControl the pre-configured cache control settings * @since 4.2 */ protected final void applyCacheControl(HttpServletResponse response, CacheControl cacheControl) { String ccValue = cacheControl.getHeaderValue(); if (ccValue != null) { // Set computed HTTP 1.1 Cache-Control header response.setHeader(HEADER_CACHE_CONTROL, ccValue); if (response.containsHeader(HEADER_PRAGMA)) { // Reset HTTP 1.0 Pragma header if present response.setHeader(HEADER_PRAGMA, ""); } if (response.containsHeader(HEADER_EXPIRES)) { // Reset HTTP 1.0 Expires header if present response.setHeader(HEADER_EXPIRES, ""); } } }
/** * Set a configured {@link CacheControl} instance as the * new value of the {@code Cache-Control} header. * @since 5.0.5 */ public void setCacheControl(CacheControl cacheControl) { setOrRemove(CACHE_CONTROL, cacheControl.getHeaderValue()); }
/** * Set the HTTP Cache-Control header according to the given settings. * @param response current HTTP response * @param cacheControl the pre-configured cache control settings * @since 4.2 */ protected final void applyCacheControl(HttpServletResponse response, CacheControl cacheControl) { String ccValue = cacheControl.getHeaderValue(); if (ccValue != null) { // Set computed HTTP 1.1 Cache-Control header response.setHeader(HEADER_CACHE_CONTROL, ccValue); if (response.containsHeader(HEADER_PRAGMA)) { // Reset HTTP 1.0 Pragma header if present response.setHeader(HEADER_PRAGMA, ""); } if (response.containsHeader(HEADER_EXPIRES)) { // Reset HTTP 1.0 Expires header if present response.setHeader(HEADER_EXPIRES, ""); } } }
/** * Expect a "Cache-Control" header with the given value. */ public WebTestClient.ResponseSpec cacheControl(CacheControl cacheControl) { return assertHeader("Cache-Control", cacheControl.getHeaderValue(), getHeaders().getCacheControl()); }
@Test public void noStore() throws Exception { CacheControl cc = CacheControl.noStore(); assertThat(cc.getHeaderValue(), Matchers.equalTo("no-store")); }
@Test public void emptyCacheControl() throws Exception { CacheControl cc = CacheControl.empty(); assertThat(cc.getHeaderValue(), Matchers.nullValue()); }
@Test public void maxAge() throws Exception { CacheControl cc = CacheControl.maxAge(1, TimeUnit.HOURS); assertThat(cc.getHeaderValue(), Matchers.equalTo("max-age=3600")); }
@Test public void staleIfError() throws Exception { CacheControl cc = CacheControl.maxAge(1, TimeUnit.HOURS).staleIfError(2, TimeUnit.HOURS); assertThat(cc.getHeaderValue(), Matchers.equalTo("max-age=3600, stale-if-error=7200")); }
@Test public void maxAgeAndSMaxAge() throws Exception { CacheControl cc = CacheControl.maxAge(1, TimeUnit.HOURS).sMaxAge(30, TimeUnit.MINUTES); assertThat(cc.getHeaderValue(), Matchers.equalTo("max-age=3600, s-maxage=1800")); }
@Test public void noCachePrivate() throws Exception { CacheControl cc = CacheControl.noCache().cachePrivate(); assertThat(cc.getHeaderValue(), Matchers.equalTo("no-cache, private")); }
@Test public void staleWhileRevalidate() throws Exception { CacheControl cc = CacheControl.maxAge(1, TimeUnit.HOURS).staleWhileRevalidate(2, TimeUnit.HOURS); assertThat(cc.getHeaderValue(), Matchers.equalTo("max-age=3600, stale-while-revalidate=7200")); }
@Test public void maxAgeAndDirectives() throws Exception { CacheControl cc = CacheControl.maxAge(3600, TimeUnit.SECONDS).cachePublic().noTransform(); assertThat(cc.getHeaderValue(), Matchers.equalTo("max-age=3600, no-transform, public")); }
@Test public void cacheControl() { assertThat(getHandler("/resources/**").getCacheControl(), Matchers.nullValue()); this.registration.setCacheControl(CacheControl.noCache().cachePrivate()); assertThat(getHandler("/resources/**").getCacheControl().getHeaderValue(), Matchers.equalTo(CacheControl.noCache().cachePrivate().getHeaderValue())); }
@Test public void cacheControl() { assertThat(getHandler("/resources/**").getCacheControl(), Matchers.nullValue()); this.registration.setCacheControl(CacheControl.noCache().cachePrivate()); assertThat(getHandler("/resources/**").getCacheControl().getHeaderValue(), Matchers.equalTo(CacheControl.noCache().cachePrivate().getHeaderValue())); }
@Test public void testResourcesWithResolversTransformersCustom() throws Exception { loadBeanDefinitions("mvc-config-resources-chain-no-auto.xml"); SimpleUrlHandlerMapping mapping = appContext.getBean(SimpleUrlHandlerMapping.class); assertNotNull(mapping); assertNotNull(mapping.getUrlMap().get("/resources/**")); ResourceHttpRequestHandler handler = appContext.getBean((String) mapping.getUrlMap().get("/resources/**"), ResourceHttpRequestHandler.class); assertNotNull(handler); assertThat(handler.getCacheControl().getHeaderValue(), Matchers.equalTo(CacheControl.maxAge(1, TimeUnit.HOURS) .sMaxAge(30, TimeUnit.MINUTES).cachePublic().getHeaderValue())); List<ResourceResolver> resolvers = handler.getResourceResolvers(); assertThat(resolvers, Matchers.hasSize(3)); assertThat(resolvers.get(0), Matchers.instanceOf(VersionResourceResolver.class)); assertThat(resolvers.get(1), Matchers.instanceOf(EncodedResourceResolver.class)); assertThat(resolvers.get(2), Matchers.instanceOf(PathResourceResolver.class)); VersionResourceResolver versionResolver = (VersionResourceResolver) resolvers.get(0); assertThat(versionResolver.getStrategyMap().get("/**/*.js"), Matchers.instanceOf(FixedVersionStrategy.class)); assertThat(versionResolver.getStrategyMap().get("/**"), Matchers.instanceOf(ContentVersionStrategy.class)); List<ResourceTransformer> transformers = handler.getResourceTransformers(); assertThat(transformers, Matchers.hasSize(2)); assertThat(transformers.get(0), Matchers.instanceOf(CachingResourceTransformer.class)); assertThat(transformers.get(1), Matchers.instanceOf(AppCacheManifestTransformer.class)); }
@Test public void cacheControl() { CacheControl control = CacheControl.maxAge(1, TimeUnit.HOURS).noTransform(); HttpHeaders headers = new HttpHeaders(); headers.setCacheControl(control.getHeaderValue()); HeaderAssertions assertions = headerAssertions(headers); // Success assertions.cacheControl(control); try { assertions.cacheControl(CacheControl.noStore()); fail("Wrong value expected"); } catch (AssertionError error) { // Expected } }
@Test // SPR-14005 public void doOverwriteExistingCacheControlHeaders() { MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("")); exchange.getResponse().getHeaders().setCacheControl(CacheControl.noStore().getHeaderValue()); setPathWithinHandlerMapping(exchange, "foo.css"); this.handler.handle(exchange).block(TIMEOUT); assertEquals("max-age=3600", exchange.getResponse().getHeaders().getCacheControl()); }
@Override public BodyBuilder cacheControl(CacheControl cacheControl) { String ccValue = cacheControl.getHeaderValue(); if (ccValue != null) { this.headers.setCacheControl(cacheControl.getHeaderValue()); } return this; }
/** * Expect a "Cache-Control" header with the given value. */ public WebTestClient.ResponseSpec cacheControl(CacheControl cacheControl) { return assertHeader("Cache-Control", cacheControl.getHeaderValue(), getHeaders().getCacheControl()); }