[
https://issues.apache.org/jira/browse/HTTPCLIENT-1690?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16325724#comment-16325724
]
ASF GitHub Bot commented on HTTPCLIENT-1690:
--------------------------------------------
Github user ok2c commented on a diff in the pull request:
https://github.com/apache/httpcomponents-client/pull/91#discussion_r161406549
--- Diff:
httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java
---
@@ -103,6 +103,8 @@ public HttpCacheEntry updateCacheEntry(
protected Header[] mergeHeaders(final HttpCacheEntry entry, final
HttpResponse response) {
+ // since we do not expect a content in the response, remove any
related headers if exists
+ response.removeHeaders(HTTP.CONTENT_ENCODING);
--- End diff --
@catchsudheera Sudheera, can we avoid mutation of the original response
message? It would be cleaner to ignore this header when copying updated headers
from the response message instead of deleting it from the original message
itself. To make things easier you might want to port `mergeHeaders` method from
master
https://github.com/apache/httpcomponents-client/blob/master/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/CacheUpdateHandler.java#L139
> ZipException occurs when content-encoding-header is set for 304-response
> -------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1690
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1690
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpCache
> Affects Versions: 4.5
> Reporter: Johannes Gruber
> Labels: stuck, volunteers-wanted
> Fix For: Stuck
>
>
> h4.Test scenario
> - Setup http server
> - Execute Request twice
> - First response
> -- Status: 200
> -- Cache-Control: public
> -- ETag: 123
> -- Body: some text
> - Second response
> -- Status: 304
> -- Content-Encoding: gzip
> - Effect: java.util.zip.ZipException: Not in GZIP format
> - Expected: Cached response
> h4.JUnit-Test
> - Dependencies: junit 4.11, commons-io 2.4, com.github.tomakehurst:wiremock
> 1.57
> {code}
> import com.github.tomakehurst.wiremock.junit.WireMockRule;
> import org.apache.commons.io.IOUtils;
> import org.apache.http.client.methods.CloseableHttpResponse;
> import org.apache.http.client.methods.HttpGet;
> import org.apache.http.impl.client.CloseableHttpClient;
> import org.apache.http.impl.client.HttpClientBuilder;
> import org.apache.http.impl.client.cache.CacheConfig;
> import org.apache.http.impl.client.cache.CachingHttpClientBuilder;
> import org.junit.Assert;
> import org.junit.Rule;
> import org.junit.Test;
> import java.io.IOException;
> import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
> import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
> import static com.github.tomakehurst.wiremock.client.WireMock.get;
> import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
> import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
> public class GZipCachingHttpClientBuilderTest {
> private static final String TEST_BODY = "Sometext";
> @Rule
> public WireMockRule wireMockRule = new WireMockRule(0);
> @Test
> public void testGzipError() throws Exception {
> stubFor(get(urlEqualTo("/my/resource"))
> .willReturn(aResponse()
> .withStatus(200)
> .withHeader("Cache-Control", "public")
> .withHeader("ETag", "123")
> .withBody(TEST_BODY)
> ));
> stubFor(get(urlEqualTo("/my/resource"))
> .withHeader("If-None-Match", equalTo("123"))
> .willReturn(aResponse()
> .withHeader("Content-Encoding", "gzip")
> .withStatus(304)
> ));
> CacheConfig.Builder cfgBuilder = CacheConfig.custom();
> CacheConfig cfg = cfgBuilder.setMaxCacheEntries(1024).build();
> HttpClientBuilder bld =
> CachingHttpClientBuilder.create().setCacheConfig(cfg);
> CloseableHttpClient client = bld.build();
> executeRequest(client);
> executeRequest(client); // second request causes Exception :-(
> }
> private void executeRequest(CloseableHttpClient client) throws IOException {
> int port = wireMockRule.port();
> CloseableHttpResponse resp = client.execute(new
> HttpGet("http://localhost:"+port+"/my/resource"));
> Assert.assertEquals(TEST_BODY,
> IOUtils.toString(resp.getEntity().getContent()));
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]