You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by jo...@apache.org on 2012/03/16 16:01:27 UTC
svn commit: r1301572 - in /httpcomponents/httpclient/trunk/httpclient/src:
main/java/org/apache/http/impl/client/CompressionDecorator.java
test/java/org/apache/http/impl/client/TestCompressionDecorator.java
Author: jonm
Date: Fri Mar 16 15:01:27 2012
New Revision: 1301572
URL: http://svn.apache.org/viewvc?rev=1301572&view=rev
Log:
HTTPCLIENT-1164: If we uncompress an entity on-the-fly, we should
also remove its Content-MD5 header, as it will likely no longer be
accurate, and an upstream consumer may incorrectly reject the
response on that basis. This way the decorator preserves semantic
transparency.
Modified:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/CompressionDecorator.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestCompressionDecorator.java
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/CompressionDecorator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/CompressionDecorator.java?rev=1301572&r1=1301571&r2=1301572&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/CompressionDecorator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/CompressionDecorator.java Fri Mar 16 15:01:27 2012
@@ -128,6 +128,7 @@ public class CompressionDecorator implem
if (Boolean.TRUE.equals(context.getAttribute(ResponseContentEncoding.UNCOMPRESSED))) {
response.removeHeaders("Content-Length");
response.removeHeaders("Content-Encoding");
+ response.removeHeaders("Content-MD5");
}
return response;
} catch (HttpException e) {
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestCompressionDecorator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestCompressionDecorator.java?rev=1301572&r1=1301571&r2=1301572&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestCompressionDecorator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestCompressionDecorator.java Fri Mar 16 15:01:27 2012
@@ -270,7 +270,7 @@ public class TestCompressionDecorator {
assertSame(handled, impl.execute(host, request, mockHandler, ctx));
verify(mockResponse, never()).setEntity(any(HttpEntity.class));
}
-
+
@Test
public void successfullyUncompressesContent() throws Exception {
final String plainText = "hello\n";
@@ -311,6 +311,29 @@ public class TestCompressionDecorator {
assertNull(result.getFirstHeader("Content-Encoding"));
}
+ @Test
+ public void uncompressedResponseHasContentMD5Removed() throws Exception {
+ final String plainText = "hello\n";
+ HttpResponse response = getGzippedResponse(plainText);
+ response.setHeader("Content-MD5","a checksum");
+ backend.setResponse(response);
+
+ HttpResponse result = impl.execute(request);
+ assertNull(result.getFirstHeader("Content-MD5"));
+ }
+
+ @Test
+ public void unencodedResponseRetainsContentMD5() throws Exception {
+ final String plainText = "hello\n";
+ HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
+ response.setHeader("Content-MD5","a checksum");
+ response.setEntity(new ByteArrayEntity(plainText.getBytes()));
+ backend.setResponse(response);
+
+ HttpResponse result = impl.execute(request);
+ assertNotNull(result.getFirstHeader("Content-MD5"));
+ }
+
private HttpResponse getGzippedResponse(final String plainText)
throws IOException {
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");