On Wed, 2020-08-12 at 08:35 +0000, Henselin, Dirk (G-GCPS) wrote:
> Hello,
> 
> English is not my native language; please excuse typing errors.
> I use HttpClient 4.5.12.
> 
> I found that despite a cache hit, the CachingHttpClient returns null,
> if the content-length header was missing in the original response. It
> worked fine after forcing the server to add the content-length
> header, but this isn't possible in case of chunked transfer encoding.
> I looked into the source code and found, that the content-length
> header of a subsequent response is merged into the cache entry's
> response headers, if the content-length header was missing in the
> original response. In case of a 304 content-length=0 is merged into
> the cache entry and this causes returning null instead of the cached
> entity.
> In CachedHttpResponseGenerator I found the following method:
> 
>     private void addMissingContentLengthHeader(final HttpResponse
> response, final HttpEntity entity) {
>         if (transferEncodingIsPresent(response)) {
>             return;
>         }
>         // Some well known proxies respond with Content-Length=0,
> when returning 304. For robustness, always
>         // use the cached entity's content length, as modern browsers
> do.
>         final Header contentLength = new
> BasicHeader(HTTP.CONTENT_LEN,
> Long.toString(entity.getContentLength()));
>         response.setHeader(contentLength);
>     }
> 
> Obviously, this method adds a missing content length header, but not
> in case of chunked transfer encoding. How can I solve this?
> 

Dirk,

The behavior of this method looks correct to me as `Transfer-Encoding`
and `Content-Length` headers are mutually exclusive.

Could you please provide a reproducer for your original problem?

Oleg



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
For additional commands, e-mail: httpclient-users-h...@hc.apache.org

Reply via email to