ant5 opened a new issue, #13353: URL: https://github.com/apache/trafficserver/issues/13353
This is a hard to identify bug. From the end-user view it appeared in browser console as ``net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)``. In ATS access log it may (*) appear as ``ERR_READ_ERROR/200`` The problematic URL sporadically changes. Site can show 0-3 errors of some URLs per page loading. When go to another page of the same site the situation repeat itself. There is a one catched problematic transaction client <->ATS assembled from the wire: # sample 1 ``` GET /wp-content/themes/epoxyworks/dist/quote-block-overlay-daFJl7Sw.svg HTTP/1.1 Host: www.epoxyworks.com Pragma: no-cache sec-ch-ua-platform: "Windows" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 sec-ch-ua: "Google Chrome";v="149", "Chromium";v="149", "Not)A;Brand";v="24" sec-ch-ua-mobile: ?0 Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: no-cors Sec-Fetch-Dest: image Referer: https://www.epoxyworks.com/ Accept-Encoding: gzip, deflate, br, zstd Accept-Language: en-US,en;q=0.9,ru;q=0.8,pl;q=0.7 Cookie: cookieyes-consent=consentid:MmxnZDMwaG5tdWJ4SVpmQVRPZjhGRzhoMXZMMUhwRWM,consent:no,action:,necessary:yes,functional:no,analytics:no,performance:no,advertisement:no; _ga=GA1.1.2040193634.1778861584; _clck=v0s5jz%5E2%5Eg62%5E0%5E2326; _ga_8ZFKGQ7DBS=GS2.1.s1781793747$o3$g1$t1781793790$j17$l0$h0 Via: 1.1 z101.orgs.link (squid) Cache-Control: no-cache Connection: close X-Forwarded-Proto: https -- HTTP/1.1 200 OK Date: Fri, 26 Jun 2026 10:15:42 GMT Content-Type: image/svg+xml Content-Length: 32578 Last-Modified: Fri, 29 May 2026 20:24:08 GMT Accept-Ranges: bytes Cache-Control: public, must-revalidate, proxy-revalidate, immutable, max-age=31536000, stale-while-revalidate=86400, stale-if-error=604800 Expires: Sat, 24 Oct 2026 10:15:41 GMT Vary: Accept-Encoding,User-Agent Content-Encoding: gzip Server: ATS/10.2.0 nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800} cf-cache-status: MISS speculation-rules: "/cdn-cgi/speculation" report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=OPavTOqmnCcehb%2BByumlVeIAypgiLckUg3aRv1qg%2Bwh5nd6SKj1zthsQ30Msq87bgdws2nLBfAvOzYne0o5KkOkmEaqJMws0h3IeETdvPLKwFSsY7Yb68xuWZXWGJdqACD7dd40%3D"}]} cf-ray: a11b73c6abbb8055-ARN alt-svc: h3=":443"; ma=86400 Age: 0 Connection: Keep-Alive Via: http/1.1 traffic_server (ApacheTrafficServer/10.2.0) <svg width="1287" height="380" viewBox="0 0 1287 380" fill="none" xmlns="http://www.w3.org/2000/svg"> ... ``` Do you see the problem? Response contain "Content-Encoding: gzip" while the body is a plain svg. I assume that "Content-Length: 32578" is wrong and dedicated to gzip'ed variant of a content. I have another case but it is not so funny and more frustrating: # sample 2 ``` GET /wp-content/uploads/2017/05/IIT-Architecture-768x512.jpg.webp HTTP/1.1 Host: www.epoxyworks.com Pragma: no-cache sec-ch-ua-platform: "Windows" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 sec-ch-ua: "Google Chrome";v="149", "Chromium";v="149", "Not)A;Brand";v="24" sec-ch-ua-mobile: ?0 Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: no-cors Sec-Fetch-Dest: image Referer: https://www.epoxyworks.com/category/home-garden/architecture/ Accept-Encoding: gzip, deflate, br, zstd Accept-Language: en-US,en;q=0.9,ru;q=0.8,pl;q=0.7 Cookie: cookieyes-consent=consentid:MmxnZDMwaG5tdWJ4SVpmQVRPZjhGRzhoMXZMMUhwRWM,consent:no,action:,necessary:yes,functional:no,analytics:no,performance:no,advertisement:no; _ga=GA1.1.2040193634.1778861584; _clck=v0s5jz%5E2%5Eg62%5E0%5E2326; _ga_8ZFKGQ7DBS=GS2.1.s1781793747$o3$g1$t1781793790$j17$l0$h0; swpext86386=5fa1b333ba5fb75515384e19da19d4fc; PHPSESSID=bf7a9f0cb68ab7e1ab1dfaaf7d5b09f5 Via: 1.1 z101.orgs.link (squid) Cache-Control: no-cache Connection: close X-Forwarded-Proto: https HTTP/1.1 200 OK Date: Wed, 01 Jul 2026 14:28:56 GMT Content-Type: image/webp Content-Length: 46806 Last-Modified: Fri, 06 Jun 2025 19:44:44 GMT Accept-Ranges: bytes Cache-Control: public, must-revalidate, proxy-revalidate, immutable, max-age=31536000, stale-while-revalidate=86400, stale-if-error=604800 Expires: Thu, 29 Oct 2026 14:28:56 GMT Vary: Accept-Encoding Server: ATS/10.2.0 nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800} cf-cache-status: MISS speculation-rules: "/cdn-cgi/speculation" report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=7K0aITjElycFvh2agtTOgfruUFfXGeP9L4Bm6KZQjbjV580%2BrLaMUTcLqo9GbDU8nZw3N6JxCdO3rAAZCQUaQlradCvLn75q0BM5QlTz1tiIXvaGf6aRvMfB%2BjRu%2FreMN3QnAZ0%3D"}]} cf-ray: a146199ac9588291-ARN alt-svc: h3=":443"; ma=86400 Age: 0 Connection: Keep-Alive Via: https/2 traffic_server (ApacheTrafficServer/10.2.0) RIFF....WEBPVP8 . ... ``` Wireshark say that all this data is about 34Kb while "Content-Length: 46806" say it must be larger. This case appear in access log as ``1782916131.021 180 fd05:562e:5a23::212:2e01 ERR_READ_ERROR/200 952 GET https://www.epoxyworks.com/wp-content/uploads/2017/05/IIT-Architecture-768x512.jpg.webp - DIRECT/www.epoxyworks.com image/webp`` The ATS<->origin interaction contain no RST or something abnormal. Morever there is no TCP "dialog" for less than 44KB. So I don't now where "952" from. # sample 3 The same as sample 2. Bytes on wire is less than content-length. ``` GET /gtm.js?id=GTM-KLQLNPW8 HTTP/1.1 Host: www.googletagmanager.com Pragma: no-cache sec-ch-ua-platform: "Windows" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 sec-ch-ua: "Google Chrome";v="149", "Chromium";v="149", "Not)A;Brand";v="24" sec-ch-ua-mobile: ?0 Accept: */* Sec-Fetch-Site: cross-site Sec-Fetch-Mode: no-cors Sec-Fetch-Dest: script Sec-Fetch-Storage-Access: active Referer: https://www.epoxyworks.com/ Accept-Encoding: gzip, deflate, br, zstd Accept-Language: en-US,en;q=0.9,ru;q=0.8,pl;q=0.7 Via: 1.1 z101.orgs.link (squid) Cache-Control: no-cache Connection: close X-Forwarded-Proto: https --- HTTP/1.1 200 OK Content-Type: application/javascript; charset=UTF-8 access-control-allow-origin: * access-control-allow-credentials: true access-control-allow-headers: Cache-Control Content-Encoding: gzip Vary: Accept-Encoding Date: Wed, 01 Jul 2026 15:52:41 GMT Expires: Wed, 01 Jul 2026 15:52:41 GMT Cache-Control: private, max-age=900 Last-Modified: Wed, 01 Jul 2026 15:00:00 GMT Strict-Transport-Security: max-age=31536000; includeSubDomains cross-origin-resource-policy: cross-origin Server: ATS/10.2.0 Content-Length: 127909 x-xss-protection: 0 alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 Age: 0 Connection: Keep-Alive Via: https/2 traffic_server (ApacheTrafficServer/10.2.0) ............k[...(.._....K.....F..**...qC...4! &....o?OUw'....s.}.~....$}........,..(;..%p.^........N.*-.*(.~_..P hH.Gj....|w.Y..{y.ua....M"...........Uk......4.].Sk.../( ``` ``ERR_READ_ERROR/200`` in access log. # conclusion May be the problem is in update object in cache logic. It seems that objects in cache replaced by the object from response from origin regardless of it's Content-Encoding header. When the fresh object has arrived it replace previous object in a cache without updating Content-Length and Content-Encoding header. Another thread is in rather complex Vary header processing. In case of Vary in response and when an object from this response is cached, further cache may hit only if apropriate headers (typical Accept-Encoding and User-agent) in request is strictly matching corresponding headers of object in a cache. There may be (?) various form of object in cache that match a criteria. There may be gzip'ed svg and plain svg for the same request. So the issue may be related to building reply which contain headers from one object and body from another. May be I'm totally wrong. P.S. ATS 10.2.X, FreeBSD 14-STABLE --- * - a few weeks ago when I began investigation I don't find errors in access log related to problematic URLs. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
