{
  "recorded_at": "2026-10-13T20:05:43.747585+08:00",
  "url": "https://gumi.ink/examples/great-wave-reading-notes.txt",
  "environment": {
    "python": "3.9.6",
    "system": "Darwin",
    "macos": "27.0.1",
    "machine": "arm64",
    "curl": "curl 8.7.1 (x86_64-apple-darwin26.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.69.0"
  },
  "initial_etag": "\"6accd07a-b5a\"",
  "requests": [
    {
      "case": "unconditional",
      "request_options": [
        "--etag-save",
        "etag.txt"
      ],
      "method": "GET",
      "status": 200,
      "http_version": "1.1",
      "downloaded_body_bytes": 2906,
      "output_file_exists": true,
      "body_sha256": "d0aac9126a25b6b4630efbef50934bfde19a49dfdded4a8e8cb31fa55e7ff383",
      "stored_body_available_before_request": false,
      "response_headers": {
        "server": "openresty",
        "date": "Tue, 13 Oct 2026 12:05:35 GMT",
        "content-type": "text/plain",
        "content-length": "2906",
        "last-modified": "Mon, 12 Oct 2026 12:20:10 GMT",
        "connection": "keep-alive",
        "vary": "Accept-Encoding",
        "etag": "\"6accd07a-b5a\"",
        "strict-transport-security": "max-age=31536000",
        "accept-ranges": "bytes"
      },
      "raw_final_response_header": "HTTP/1.1 200 OK\nServer: openresty\nDate: Tue, 13 Oct 2026 12:05:35 GMT\nContent-Type: text/plain\nContent-Length: 2906\nLast-Modified: Mon, 12 Oct 2026 12:20:10 GMT\nConnection: keep-alive\nVary: Accept-Encoding\nETag: \"6accd07a-b5a\"\nStrict-Transport-Security: max-age=31536000\nAccept-Ranges: bytes"
    },
    {
      "case": "matching_tag",
      "request_options": [
        "--etag-compare",
        "etag.txt"
      ],
      "method": "GET",
      "status": 304,
      "http_version": "1.1",
      "downloaded_body_bytes": 0,
      "output_file_exists": false,
      "body_sha256": null,
      "stored_body_available_before_request": true,
      "response_headers": {
        "server": "openresty",
        "date": "Tue, 13 Oct 2026 12:05:38 GMT",
        "last-modified": "Mon, 12 Oct 2026 12:20:10 GMT",
        "connection": "keep-alive",
        "etag": "\"6accd07a-b5a\"",
        "strict-transport-security": "max-age=31536000"
      },
      "raw_final_response_header": "HTTP/1.1 304 Not Modified\nServer: openresty\nDate: Tue, 13 Oct 2026 12:05:38 GMT\nLast-Modified: Mon, 12 Oct 2026 12:20:10 GMT\nConnection: keep-alive\nETag: \"6accd07a-b5a\"\nStrict-Transport-Security: max-age=31536000"
    },
    {
      "case": "nonmatching_tag",
      "request_options": [
        "--header",
        "If-None-Match: \"gumi-http304-lab-nonmatching\""
      ],
      "method": "GET",
      "status": 200,
      "http_version": "1.1",
      "downloaded_body_bytes": 2906,
      "output_file_exists": true,
      "body_sha256": "d0aac9126a25b6b4630efbef50934bfde19a49dfdded4a8e8cb31fa55e7ff383",
      "stored_body_available_before_request": true,
      "response_headers": {
        "server": "openresty",
        "date": "Tue, 13 Oct 2026 12:05:40 GMT",
        "content-type": "text/plain",
        "content-length": "2906",
        "last-modified": "Mon, 12 Oct 2026 12:20:10 GMT",
        "connection": "keep-alive",
        "vary": "Accept-Encoding",
        "etag": "\"6accd07a-b5a\"",
        "strict-transport-security": "max-age=31536000",
        "accept-ranges": "bytes"
      },
      "raw_final_response_header": "HTTP/1.1 200 OK\nServer: openresty\nDate: Tue, 13 Oct 2026 12:05:40 GMT\nContent-Type: text/plain\nContent-Length: 2906\nLast-Modified: Mon, 12 Oct 2026 12:20:10 GMT\nConnection: keep-alive\nVary: Accept-Encoding\nETag: \"6accd07a-b5a\"\nStrict-Transport-Security: max-age=31536000\nAccept-Ranges: bytes"
    },
    {
      "case": "weak_matching_tag",
      "request_options": [
        "--header",
        "If-None-Match: W/\"6accd07a-b5a\""
      ],
      "method": "GET",
      "status": 304,
      "http_version": "1.1",
      "downloaded_body_bytes": 0,
      "output_file_exists": false,
      "body_sha256": null,
      "stored_body_available_before_request": true,
      "response_headers": {
        "server": "openresty",
        "date": "Tue, 13 Oct 2026 12:05:42 GMT",
        "last-modified": "Mon, 12 Oct 2026 12:20:10 GMT",
        "connection": "keep-alive",
        "etag": "\"6accd07a-b5a\"",
        "strict-transport-security": "max-age=31536000"
      },
      "raw_final_response_header": "HTTP/1.1 304 Not Modified\nServer: openresty\nDate: Tue, 13 Oct 2026 12:05:42 GMT\nLast-Modified: Mon, 12 Oct 2026 12:20:10 GMT\nConnection: keep-alive\nETag: \"6accd07a-b5a\"\nStrict-Transport-Security: max-age=31536000"
    },
    {
      "case": "tag_without_stored_body",
      "request_options": [
        "--etag-compare",
        "etag.txt"
      ],
      "method": "GET",
      "status": 304,
      "http_version": "1.1",
      "downloaded_body_bytes": 0,
      "output_file_exists": false,
      "body_sha256": null,
      "stored_body_available_before_request": false,
      "response_headers": {
        "server": "openresty",
        "date": "Tue, 13 Oct 2026 12:05:43 GMT",
        "last-modified": "Mon, 12 Oct 2026 12:20:10 GMT",
        "connection": "keep-alive",
        "etag": "\"6accd07a-b5a\"",
        "strict-transport-security": "max-age=31536000"
      },
      "raw_final_response_header": "HTTP/1.1 304 Not Modified\nServer: openresty\nDate: Tue, 13 Oct 2026 12:05:43 GMT\nLast-Modified: Mon, 12 Oct 2026 12:20:10 GMT\nConnection: keep-alive\nETag: \"6accd07a-b5a\"\nStrict-Transport-Security: max-age=31536000"
    }
  ],
  "scope": "Five sequential read-only GET requests to one URL. The missing-body case deliberately deletes only the first curl output in a temporary directory. No server changes, browser cache inspection, CDN topology inspection or load tests."
}
