{
  "log": {
    "version": "1.2",
    "creator": {
      "name": "httpd 2.4.68 etag/content-encoding study",
      "version": "1.0"
    },
    "pages": [
      {
        "startedDateTime": "2026-09-09T02:44:50.000Z",
        "id": "page_1",
        "title": "BEFORE the fix \u2014 Apache 2.4.68 default (DeflateAlterETag AddSuffix)",
        "pageTimings": {
          "onContentLoad": 40,
          "onLoad": 60
        }
      }
    ],
    "entries": [
      {
        "_comment": "identity 200 \u2014 the unencoded representation. Its ETag (\"13b-658b017f9d000\") is the pre-compression tag.",
        "startedDateTime": "2026-09-09T02:44:50.000Z",
        "time": 11,
        "request": {
          "method": "GET",
          "url": "http://localhost:18080/plain/big.txt",
          "httpVersion": "HTTP/1.1",
          "headers": [
            {
              "name": "Host",
              "value": "localhost:18080"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Apache ETag study \u2014 see https://amoshydra.github.io/blog/)"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "OK",
          "httpVersion": "HTTP/1.1",
          "headers": [
            {
              "name": "Date",
              "value": "Wed, 09 Sep 2026 02:44:50 GMT"
            },
            {
              "name": "Server",
              "value": "Apache/2.4.68 (Unix)"
            },
            {
              "name": "Last-Modified",
              "value": "Mon, 10 Aug 2026 12:00:00 GMT"
            },
            {
              "name": "ETag",
              "value": "\"13b-658b017f9d000\""
            },
            {
              "name": "Accept-Ranges",
              "value": "bytes"
            },
            {
              "name": "Content-Length",
              "value": "315"
            },
            {
              "name": "Vary",
              "value": "Accept-Encoding"
            },
            {
              "name": "Content-Type",
              "value": "text/plain"
            }
          ],
          "cookies": [],
          "content": {
            "size": 315,
            "mimeType": "text/plain",
            "text": "The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. "
          },
          "redirectURL": "",
          "headersSize": 251,
          "bodySize": 315,
          "_transferSize": 566
        },
        "cache": {},
        "timings": {
          "blocked": 0,
          "dns": 0,
          "connect": 0,
          "send": 1,
          "wait": 8,
          "receive": 2,
          "ssl": 0
        },
        "serverIPAddress": "127.0.0.1",
        "connection": "1"
      },
      {
        "_comment": "gzip 200 \u2014 the representation the client actually caches, under ETag \"13b-658b017f9d000-gzip\". Note Vary: Accept-Encoding and Content-Encoding: gzip.",
        "startedDateTime": "2026-09-09T02:44:50.200Z",
        "time": 13,
        "request": {
          "method": "GET",
          "url": "http://localhost:18080/plain/big.txt",
          "httpVersion": "HTTP/1.1",
          "headers": [
            {
              "name": "Host",
              "value": "localhost:18080"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Apache ETag study \u2014 see https://amoshydra.github.io/blog/)"
            },
            {
              "name": "Accept-Encoding",
              "value": "gzip"
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "OK",
          "httpVersion": "HTTP/1.1",
          "headers": [
            {
              "name": "Date",
              "value": "Wed, 09 Sep 2026 02:44:50 GMT"
            },
            {
              "name": "Server",
              "value": "Apache/2.4.68 (Unix)"
            },
            {
              "name": "Last-Modified",
              "value": "Mon, 10 Aug 2026 12:00:00 GMT"
            },
            {
              "name": "ETag",
              "value": "\"13b-658b017f9d000-gzip\""
            },
            {
              "name": "Accept-Ranges",
              "value": "bytes"
            },
            {
              "name": "Vary",
              "value": "Accept-Encoding"
            },
            {
              "name": "Content-Encoding",
              "value": "gzip"
            },
            {
              "name": "Content-Length",
              "value": "69"
            },
            {
              "name": "Content-Type",
              "value": "text/plain"
            }
          ],
          "cookies": [],
          "content": {
            "size": 69,
            "mimeType": "application/octet-stream",
            "text": "H4sIAAAAAAAAAwvJSFUoLM1MzlZIKsovz1NIy69QyCrNLShWyC9LLVIoAUrnJFZVKqTkp+sphIwqRlIMAA7EP2U7AQAA",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": 279,
          "bodySize": 69,
          "_transferSize": 348
        },
        "cache": {},
        "timings": {
          "blocked": 0,
          "dns": 0,
          "connect": 0,
          "send": 1,
          "wait": 10,
          "receive": 2,
          "ssl": 0
        },
        "serverIPAddress": "127.0.0.1",
        "connection": "2"
      },
      {
        "_comment": "BUG \u2014 the client revalidates with the exact tag it was given (\"13b-658b017f9d000-gzip\"). Apache compares it against the identity tag \"13b-658b017f9d000\", they never match, so it answers 200 and re-sends the body. RFC 9110 s13.1.2 says this must be a 304.",
        "startedDateTime": "2026-09-09T02:44:50.400Z",
        "time": 15,
        "request": {
          "method": "GET",
          "url": "http://localhost:18080/plain/big.txt",
          "httpVersion": "HTTP/1.1",
          "headers": [
            {
              "name": "Host",
              "value": "localhost:18080"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Apache ETag study \u2014 see https://amoshydra.github.io/blog/)"
            },
            {
              "name": "Accept-Encoding",
              "value": "gzip"
            },
            {
              "name": "If-None-Match",
              "value": "\"13b-658b017f9d000-gzip\""
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 200,
          "statusText": "OK",
          "httpVersion": "HTTP/1.1",
          "headers": [
            {
              "name": "Date",
              "value": "Wed, 09 Sep 2026 02:44:50 GMT"
            },
            {
              "name": "Server",
              "value": "Apache/2.4.68 (Unix)"
            },
            {
              "name": "Last-Modified",
              "value": "Mon, 10 Aug 2026 12:00:00 GMT"
            },
            {
              "name": "ETag",
              "value": "\"13b-658b017f9d000-gzip\""
            },
            {
              "name": "Accept-Ranges",
              "value": "bytes"
            },
            {
              "name": "Vary",
              "value": "Accept-Encoding"
            },
            {
              "name": "Content-Encoding",
              "value": "gzip"
            },
            {
              "name": "Content-Length",
              "value": "69"
            },
            {
              "name": "Content-Type",
              "value": "text/plain"
            }
          ],
          "cookies": [],
          "content": {
            "size": 69,
            "mimeType": "application/octet-stream",
            "text": "H4sIAAAAAAAAAwvJSFUoLM1MzlZIKsovz1NIy69QyCrNLShWyC9LLVIoAUrnJFZVKqTkp+sphIwqRlIMAA7EP2U7AQAA",
            "encoding": "base64"
          },
          "redirectURL": "",
          "headersSize": 279,
          "bodySize": 69,
          "_transferSize": 348
        },
        "cache": {},
        "timings": {
          "blocked": 0,
          "dns": 0,
          "connect": 0,
          "send": 1,
          "wait": 12,
          "receive": 2,
          "ssl": 0
        },
        "serverIPAddress": "127.0.0.1",
        "connection": "3"
      },
      {
        "_comment": "a 304 only happens if the client sends the identity tag \"13b-658b017f9d000\" \u2014 a tag it was never given. And it is malformed: the ETag is \"13b-658b017f9d000\" (not \"13b-658b017f9d000-gzip\") and Vary / Content-Encoding are missing, which RFC 9110 s15.4.5 requires a 304 to carry.",
        "startedDateTime": "2026-09-09T02:44:50.600Z",
        "time": 17,
        "request": {
          "method": "GET",
          "url": "http://localhost:18080/plain/big.txt",
          "httpVersion": "HTTP/1.1",
          "headers": [
            {
              "name": "Host",
              "value": "localhost:18080"
            },
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (Apache ETag study \u2014 see https://amoshydra.github.io/blog/)"
            },
            {
              "name": "Accept-Encoding",
              "value": "gzip"
            },
            {
              "name": "If-None-Match",
              "value": "\"13b-658b017f9d000\""
            }
          ],
          "queryString": [],
          "cookies": [],
          "headersSize": -1,
          "bodySize": 0
        },
        "response": {
          "status": 304,
          "statusText": "Not Modified",
          "httpVersion": "HTTP/1.1",
          "headers": [
            {
              "name": "Date",
              "value": "Wed, 09 Sep 2026 02:44:50 GMT"
            },
            {
              "name": "Server",
              "value": "Apache/2.4.68 (Unix)"
            },
            {
              "name": "Last-Modified",
              "value": "Mon, 10 Aug 2026 12:00:00 GMT"
            },
            {
              "name": "ETag",
              "value": "\"13b-658b017f9d000\""
            },
            {
              "name": "Accept-Ranges",
              "value": "bytes"
            }
          ],
          "cookies": [],
          "content": {
            "size": 0,
            "mimeType": "text/plain",
            "text": ""
          },
          "redirectURL": "",
          "headersSize": 191,
          "bodySize": 0,
          "_transferSize": 191
        },
        "cache": {},
        "timings": {
          "blocked": 0,
          "dns": 0,
          "connect": 0,
          "send": 1,
          "wait": 14,
          "receive": 2,
          "ssl": 0
        },
        "serverIPAddress": "127.0.0.1",
        "connection": "4"
      }
    ]
  }
}