This is an automated email from the ASF dual-hosted git repository. zwoop pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push: new be0a07c Fixes a case on chunked cached objects, 304s and Ranges be0a07c is described below commit be0a07c0224b0288fa7855bea3279650e395c6e9 Author: Leif Hedstrom <zw...@apache.org> AuthorDate: Fri Apr 6 13:06:36 2018 -0600 Fixes a case on chunked cached objects, 304s and Ranges Before this fix, in the deranged case of 1. Chunked object in cache (which is a static asset) 2. Object goes stale 3. Client does a Range request 4. Origin responds with a 304 we can serve a "200 OK" with a partial object (the requested range). This not only messes up a client, but in the parent proxy setup, can pollute the downstream cache with a truncated object. This fixes #3409. --- proxy/http/HttpTransact.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc index 7297888..ee5769d 100644 --- a/proxy/http/HttpTransact.cc +++ b/proxy/http/HttpTransact.cc @@ -6596,7 +6596,7 @@ HttpTransact::handle_content_length_header(State *s, HTTPHdr *header, HTTPHdr *b } TxnDebug("http_trans", "[handle_content_length_header] RESPONSE cont len in hdr is %" PRId64, header->get_content_length()); } else { - // No content length header + // No content length header. if (s->source == SOURCE_CACHE) { // If there is no content-length header, we can // insert one since the cache knows definately @@ -6618,6 +6618,12 @@ HttpTransact::handle_content_length_header(State *s, HTTPHdr *header, HTTPHdr *b header->set_content_length(cl); s->hdr_info.trust_response_cl = true; } + } else if (s->source == SOURCE_HTTP_ORIGIN_SERVER && s->hdr_info.server_response.status_get() == HTTP_STATUS_NOT_MODIFIED && + s->range_setup == RANGE_NOT_TRANSFORM_REQUESTED) { + // In this case, we had a cached object, possibly chunked encoded (so we don't have a CL: header), but the origin did a + // 304 Not Modified response. We can still turn this into a proper Range response from the cached object. + change_response_header_because_of_range_request(s, header); + s->hdr_info.trust_response_cl = true; } else { // Check to see if there is no content length // header because the response precludes a -- To stop receiving notification emails like this one, please contact zw...@apache.org.