private void removeResponseTransferEncoding(final HttpResponse response) { response.removeHeaders("TE"); response.removeHeaders(HttpHeaders.TRANSFER_ENCODING); }
private void ensure304DoesNotContainExtraEntityHeaders(final HttpResponse response) { final String[] disallowedEntityHeaders = { HeaderConstants.ALLOW, HttpHeaders.CONTENT_ENCODING, "Content-Language", HttpHeaders.CONTENT_LENGTH, "Content-MD5", "Content-Range", HttpHeaders.CONTENT_TYPE, HeaderConstants.LAST_MODIFIED }; if (response.getCode() == HttpStatus.SC_NOT_MODIFIED) { for(final String hdr : disallowedEntityHeaders) { response.removeHeaders(hdr); } } }
return; response.removeHeaders(HttpHeaders.CONTENT_ENCODING); for (final Header h : newHeaders) { response.addHeader(h);
@Test public void testPlain307ResponseCodeIsNotCacheable() { response.setCode(HttpStatus.SC_TEMPORARY_REDIRECT); response.removeHeaders("Expires"); response.removeHeaders("Cache-Control"); Assert.assertFalse(policy.isResponseCacheable("GET", response)); }
@Test public void testPlain303ResponseCodeIsNotCacheableUnderDefaultBehavior() { response.setCode(HttpStatus.SC_SEE_OTHER); response.removeHeaders("Expires"); response.removeHeaders("Cache-Control"); Assert.assertFalse(policy.isResponseCacheable("GET", response)); }
@Test public void testPlain302ResponseCodeIsNotCacheable() { response.setCode(HttpStatus.SC_MOVED_TEMPORARILY); response.removeHeaders("Expires"); response.removeHeaders("Cache-Control"); Assert.assertFalse(policy.isResponseCacheable("GET", response)); }
private void warningsWithNonMatchingWarnDatesAreRemoved( final HttpResponse response) { final Date responseDate = DateUtils.parseDate(response, HttpHeaders.DATE); if (responseDate == null) { return; } final Header[] warningHeaders = response.getHeaders(HeaderConstants.WARNING); if (warningHeaders == null || warningHeaders.length == 0) { return; } final List<Header> newWarningHeaders = new ArrayList<>(); boolean modified = false; for(final Header h : warningHeaders) { for(final WarningValue wv : WarningValue.getWarningValues(h)) { final Date warnDate = wv.getWarnDate(); if (warnDate == null || warnDate.equals(responseDate)) { newWarningHeaders.add(new BasicHeader(HeaderConstants.WARNING,wv.toString())); } else { modified = true; } } } if (modified) { response.removeHeaders(HeaderConstants.WARNING); for(final Header h : newWarningHeaders) { response.addHeader(h); } } }
@Test public void testPlain303ResponseCodeIsNotCacheableEvenIf303CachingEnabled() { policy = new ResponseCachingPolicy(0, true, false, true); response.setCode(HttpStatus.SC_SEE_OTHER); response.removeHeaders("Expires"); response.removeHeaders("Cache-Control"); Assert.assertFalse(policy.isResponseCacheable("GET", response)); }
@Test public void testResponsesWithoutDateHeadersAreNotCacheable() { response.removeHeaders("Date"); Assert.assertFalse(policy.isResponseCacheable("GET", response)); }
@Test public void flushesEntrySpecifiedByContentLocationIfResponseHasNoDate() throws Exception { final HttpRequest request = new BasicHttpRequest("GET", "/"); final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_OK); response.setHeader("ETag", "\"new-etag\""); response.removeHeaders("Date"); final String key = "http://foo.example.com:80/bar"; response.setHeader("Content-Location", key); final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", "\"old-etag\""), new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), }); cacheReturnsEntryForUri(key, entry); impl.flushCacheEntriesInvalidatedByExchange(host, request, response, cacheKeyResolver, mockStorage, operationCallback); verify(mockStorage).getEntry(ArgumentMatchers.eq(key), ArgumentMatchers.<FutureCallback<HttpCacheEntry>>any()); verify(mockStorage).removeEntry(ArgumentMatchers.eq(key), ArgumentMatchers.<FutureCallback<Boolean>>any()); verifyNoMoreInteractions(mockStorage); }
private void removeResponseTransferEncoding(final HttpResponse response) { response.removeHeaders("TE"); response.removeHeaders(HttpHeaders.TRANSFER_ENCODING); }
@Test public void flushesEntrySpecifiedByContentLocationIfResponseHasNoDate() throws Exception { final HttpRequest request = new BasicHttpRequest("GET", "/"); final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_OK); response.setHeader("ETag", "\"new-etag\""); response.removeHeaders("Date"); final String key = "http://foo.example.com:80/bar"; response.setHeader("Content-Location", key); final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", "\"old-etag\""), new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), }); when(mockStorage.getEntry(key)).thenReturn(entry); impl.flushCacheEntriesInvalidatedByExchange(host, request, response, cacheKeyResolver, mockStorage); verify(mockStorage).getEntry(key); verify(mockStorage).removeEntry(key); verifyNoMoreInteractions(mockStorage); }
@Test public void doesNotFlushEntrySpecifiedByContentLocationIfResponseHasNoEtag() throws Exception { final HttpRequest request = new BasicHttpRequest("GET", "/"); final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_OK); response.removeHeaders("ETag"); response.setHeader("Date", DateUtils.formatDate(now)); final String key = "http://foo.example.com:80/bar"; response.setHeader("Content-Location", key); final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("ETag", "\"old-etag\"") }); when(mockStorage.getEntry(key)).thenReturn(entry); impl.flushCacheEntriesInvalidatedByExchange(host, request, response, cacheKeyResolver, mockStorage); verify(mockStorage).getEntry(key); verifyNoMoreInteractions(mockStorage); }
@Test public void doesNotFlushEntrySpecifiedByContentLocationIfResponseHasNoEtag() throws Exception { final HttpRequest request = new BasicHttpRequest("GET", "/"); final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_OK); response.removeHeaders("ETag"); response.setHeader("Date", DateUtils.formatDate(now)); final String key = "http://foo.example.com:80/bar"; response.setHeader("Content-Location", key); final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("ETag", "\"old-etag\"") }); cacheReturnsEntryForUri(key, entry); impl.flushCacheEntriesInvalidatedByExchange(host, request, response, cacheKeyResolver, mockStorage, operationCallback); verify(mockStorage).getEntry(ArgumentMatchers.eq(key), ArgumentMatchers.<FutureCallback<HttpCacheEntry>>any()); verifyNoMoreInteractions(mockStorage); }
@Test public void notCacheableIfExpiresEqualsDateAndNoCacheControl() { response.setHeader("Date", DateUtils.formatDate(now)); response.setHeader("Expires", DateUtils.formatDate(now)); response.removeHeaders("Cache-Control"); Assert.assertFalse(policy.isResponseCacheable(request, response)); }
@Test public void notCacheableIfExpiresPrecedesDateAndNoCacheControl() { response.setHeader("Date", DateUtils.formatDate(now)); response.setHeader("Expires", DateUtils.formatDate(sixSecondsAgo)); response.removeHeaders("Cache-Control"); Assert.assertFalse(policy.isResponseCacheable(request, response)); }
private void ensure304DoesNotContainExtraEntityHeaders(final HttpResponse response) { final String[] disallowedEntityHeaders = { HeaderConstants.ALLOW, HttpHeaders.CONTENT_ENCODING, "Content-Language", HttpHeaders.CONTENT_LENGTH, "Content-MD5", "Content-Range", HttpHeaders.CONTENT_TYPE, HeaderConstants.LAST_MODIFIED }; if (response.getCode() == HttpStatus.SC_NOT_MODIFIED) { for(final String hdr : disallowedEntityHeaders) { response.removeHeaders(hdr); } } }
return; response.removeHeaders(HttpHeaders.CONTENT_ENCODING); for (final Header h : newHeaders) { response.addHeader(h);
private void warningsWithNonMatchingWarnDatesAreRemoved( final HttpResponse response) { final Date responseDate = DateUtils.parseDate(response, HttpHeaders.DATE); if (responseDate == null) { return; } final Header[] warningHeaders = response.getHeaders(HeaderConstants.WARNING); if (warningHeaders == null || warningHeaders.length == 0) { return; } final List<Header> newWarningHeaders = new ArrayList<>(); boolean modified = false; for(final Header h : warningHeaders) { for(final WarningValue wv : WarningValue.getWarningValues(h)) { final Date warnDate = wv.getWarnDate(); if (warnDate == null || warnDate.equals(responseDate)) { newWarningHeaders.add(new BasicHeader(HeaderConstants.WARNING,wv.toString())); } else { modified = true; } } } if (modified) { response.removeHeaders(HeaderConstants.WARNING); for(final Header h : newWarningHeaders) { response.addHeader(h); } } }
Args.notNull(response, "HTTP response"); if (this.overwrite) { response.removeHeaders(HttpHeaders.TRANSFER_ENCODING); response.removeHeaders(HttpHeaders.CONTENT_LENGTH); } else { if (response.containsHeader(HttpHeaders.TRANSFER_ENCODING)) {