# caching pydantic_v2.BaseModel
  > GET https://api.example.com/users/3
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  miss = network 3:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"v1"'), ('cache-control', 'max-age=60'), ('x-request-id', 'r1'), ('content-length', '21'), ('content-type', 'application/json')]
  fresh hit = fresh_cache 3:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('etag', '"v1"'), ('cache-control', 'max-age=60'), ('x-request-id', 'r1'), ('content-type', 'application/json'), ('Content-Length', '21')]
  > GET https://api.example.com/users/30
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  aged past max-age stored = network 30:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=60'), ('age', '100'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/30
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "e"] b''
  aged past max-age again = revalidated 30:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('etag', '"e"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/31
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  aged past the cap stored = network 31:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=100000'), ('age', '400'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/31
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "e"] b''
  aged past the cap again = revalidated 31:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=100000'), ('content-type', 'application/json'), ('etag', '"e"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/32
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  aged within a raised cap stored = network 32:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=100000'), ('age', '400'), ('content-length', '22'), ('content-type', 'application/json')]
  aged within a raised cap again = fresh_cache 32:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=100000'), ('content-type', 'application/json'), ('Content-Length', '22')]
  > GET https://api.example.com/users/33
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  old date stored = network 33:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=60'), ('date', 'Sun, 06 Nov 1994 08:49:37 GMT'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/33
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "e"] b''
  old date again = revalidated 33:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('date', 'Sun, 06 Nov 1994 08:49:37 GMT'), ('content-type', 'application/json'), ('etag', '"e"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/34
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  expires after its date stored = network 34:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('expires', 'Fri, 01 Jan 2100 01:00:00 GMT'), ('date', 'Fri, 01 Jan 2100 00:00:00 GMT'), ('content-length', '22'), ('content-type', 'application/json')]
  expires after its date again = fresh_cache 34:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('etag', '"e"'), ('expires', 'Fri, 01 Jan 2100 01:00:00 GMT'), ('date', 'Fri, 01 Jan 2100 00:00:00 GMT'), ('content-type', 'application/json'), ('Content-Length', '22')]
  > GET https://api.example.com/users/35
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  expires without a date stored = network 35:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('expires', 'Fri, 01 Jan 2100 01:00:00 GMT'), ('content-length', '22'), ('content-type', 'application/json')]
  expires without a date again = fresh_cache 35:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('etag', '"e"'), ('expires', 'Fri, 01 Jan 2100 01:00:00 GMT'), ('content-type', 'application/json'), ('Content-Length', '22')]
  > GET https://api.example.com/users/36
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  invalid expires stored = network 36:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('expires', '0'), ('date', 'Fri, 01 Jan 2100 00:00:00 GMT'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/36
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "e"] b''
  invalid expires again = revalidated 36:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('expires', '0'), ('date', 'Fri, 01 Jan 2100 00:00:00 GMT'), ('content-type', 'application/json'), ('etag', '"e"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/37
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  invalid age stored = network 37:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=60'), ('age', 'soon'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/37
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "e"] b''
  invalid age again = revalidated 37:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('etag', '"e"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/38
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  huge max-age stored = network 38:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=999999999999'), ('content-length', '22'), ('content-type', 'application/json')]
  huge max-age again = fresh_cache 38:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=999999999999'), ('content-type', 'application/json'), ('Content-Length', '22')]
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  list miss = network [1] status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-length', '30'), ('content-type', 'application/json')]
  list hit = fresh_cache [1] status=200 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('Content-Length', '30')]
  > GET https://api.example.com/users/4
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  listed 203 = network 4:cat status=203 network=203 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  listed 203 again = fresh_cache 4:cat status=203 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('Content-Length', '21')]
  > GET https://api.example.com/users/5
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  no-cache stored = network 5:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', 'W/"a"'), ('cache-control', 'no-cache'), ('x-old', '1'), ('connection', 'keep-alive'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/5
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: W/"a"] b''
  revalidated = revalidated 5:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('content-type', 'application/json'), ('etag', '"a"'), ('cache-control', 'max-age=60'), ('x-old', '2'), ('Content-Length', '21')]
  revalidated then fresh = fresh_cache 5:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('content-type', 'application/json'), ('etag', '"a"'), ('cache-control', 'max-age=60'), ('x-old', '2'), ('Content-Length', '21')]
  > GET https://api.example.com/users/6
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  stale stored = network 6:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"b"'), ('cache-control', 'max-age=0'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/6
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "b"] b''
  changed = network 6:dog status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"c"'), ('cache-control', 'max-age=0'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/6
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "c"] b''
  revalidated without validators = revalidated 6:dog status=200 network=304 attempts=1 type=application/json request_id=None headers=[('etag', '"c"'), ('cache-control', 'max-age=0'), ('content-type', 'application/json'), ('Content-Length', '21')]
  > GET https://api.example.com/users/7
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  dated stored = network 7:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"d"'), ('last-modified', 'Wed, 21 Oct 2015 07:28:00 GMT'), ('cache-control', 'max-age=0'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/7
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-modified-since: Wed, 21 Oct 2015 07:28:00 GMT] b''
  dated revalidated = revalidated 7:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('etag', '"d"'), ('cache-control', 'max-age=0'), ('content-type', 'application/json'), ('last-modified', 'Wed, 21 Oct 2015 07:28:00 GMT'), ('Content-Length', '21')]
  > GET https://api.example.com/users/7
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-modified-since: Wed, 21 Oct 2015 07:28:00 GMT] b''
  dated changed date ! ProtocolDataError: ProtocolDataError(operation_id='getUser', reason='inconsistent') [operation_id='getUser'] inconsistent
  > GET https://api.example.com/users?page=2
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  etag helper without an etag = network [] status=200 network=200 attempts=1 type=application/json request_id=None headers=[('last-modified', 'Wed, 21 Oct 2015 07:28:00 GMT'), ('cache-control', 'max-age=0'), ('content-length', '11'), ('content-type', 'application/json')]
  > GET https://api.example.com/users?page=2
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  etag helper sends unconditionally = network [] status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '11'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/8
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  mismatch stored = network 8:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=0'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/8
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "e"] b''
  304 of another validator ! ProtocolDataError: ProtocolDataError(operation_id='getUser', reason='inconsistent') [operation_id='getUser'] inconsistent
  > GET https://api.example.com/users/8
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  after a refused 304 the entry is gone = network 8:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"e"'), ('cache-control', 'max-age=0'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/8
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "e"] b''
  304 with another vary = revalidated 8:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=0'), ('content-type', 'application/json'), ('etag', '"e"'), ('vary', 'accept-language'), ('Content-Length', '21')]
  > GET https://api.example.com/users/8
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  after the vary change ! NotFoundError: Error code: 404 - {"id":8,"name":"cat"} [operation_id='getUser', status_code=404, body=b'{"id":8,"name":"cat"}', body_bytes=b'{"id":8,"name":"cat"}', truncated=False, cause=1 validation error for Error
message
  Field required [type=missing, input_value={'id': 8, 'name': 'cat'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/<version>/v/missing]
  > GET https://api.example.com/users/25
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  aged stored = network 25:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"g"'), ('cache-control', 'max-age=60'), ('age', '100'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/25
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "g"] b''
  aged revalidated by a 304 without Age = revalidated 25:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('etag', '"g"'), ('Content-Length', '22')]
  fresh after the 304 = fresh_cache 25:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('etag', '"g"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/26
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  stale with a validator beyond ASCII, not stored = network 26:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"café"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/26
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  no-cache with a validator beyond ASCII, stored = network 26:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"café"'), ('cache-control', 'max-age=60, no-cache'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/26
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  fetched again without the validator = network 26:dog status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"café"'), ('cache-control', 'max-age=60, no-cache'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/9
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, accept-language: en] b''
  english stored = network 9:english status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('vary', 'Accept-Language, accept-language'), ('content-length', '25'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/9
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, accept-language: fr] b''
  french stored = network 9:french status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('vary', 'Accept-Language, accept-language'), ('content-length', '24'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/9
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, accept-language: en] b''
  english replacement = network 9:english status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('vary', 'Accept-Language, accept-language'), ('content-length', '25'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/9
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, accept-language: fr] b''
  french replacement = network 9:french status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('vary', 'Accept-Language, accept-language'), ('content-length', '24'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/9
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  no language = network 9:none status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/9
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  Vary absent replacement = network 9:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('vary', 'Accept-Language, accept-language'), ('content-length', '21'), ('content-type', 'application/json')]
  Vary absent hit = fresh_cache 9:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('vary', 'Accept-Language, accept-language'), ('content-type', 'application/json'), ('Content-Length', '21')]
  > GET https://api.example.com/users/9
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, accept-language: ] b''
  Vary empty replacement = network 9:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('vary', 'Accept-Language, accept-language'), ('content-length', '21'), ('content-type', 'application/json')]
  Vary empty hit = fresh_cache 9:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('vary', 'Accept-Language, accept-language'), ('content-type', 'application/json'), ('Content-Length', '21')]
  > GET https://api.example.com/users/43
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-api-key: a] b''
  alice key = network 43:alice status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-length', '24'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/43
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-api-key: b] b''
  bob key = network 43:bob status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/43
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-api-key: a] b''
  alice key again ! APIConnectionError: APIConnectionError(operation_id='getUser', cause='RemoteProtocolError') [operation_id='getUser', cause=RemoteProtocolError('Server disconnected without sending a response.')]
  bob key again = fresh_cache 43:bob status=200 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('Content-Length', '22')]
  > GET https://api.example.com/users/40
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  unlisted vary = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('vary', 'Accept-Encoding'), ('cache-control', 'max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/40
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  unlisted vary again = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/41
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  star vary = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('vary', '*'), ('cache-control', 'max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/41
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  star vary again = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/42
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  empty vary = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('vary', ','), ('cache-control', 'max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  empty vary again = fresh_cache 1:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('vary', ','), ('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('Content-Length', '21')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  no-store after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  no-store = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'no-store, max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  no-store next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  set-cookie after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  set-cookie = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('set-cookie', 'a=1'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  set-cookie next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/12
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users/13
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, cookie: a=1] b''
  jar cookie on a redirect hop = network 13:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  extension after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  extension = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60, stale-while-revalidate=5'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  extension next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  malformed after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  malformed = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=soon'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  malformed next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  repeated after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  repeated = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=1, max-age=2'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  repeated next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  valued public after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  valued public = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'public=1, max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  valued public next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  unquoted private after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  unquoted private = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'private=x, max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  unquoted private next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  bad quoting after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  bad quoting = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'private="a'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  bad quoting next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  unlisted status after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  unlisted status = network 1:cat status=203 network=203 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  unlisted status next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  no freshness or validator after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  no freshness or validator = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '21'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  no freshness or validator next = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  quoted private after stale = network 10:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"s"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/10
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "s"] b''
  quoted private = network 1:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'private="a, b", max-age=60'), ('content-length', '21'), ('content-type', 'application/json')]
  quoted private stored = fresh_cache 1:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'private="a, b", max-age=60'), ('content-type', 'application/json'), ('Content-Length', '21')]
  > GET https://api.example.com/users/11
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  kept stored = network 11:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=0'), ('etag', '"k"'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/11
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "k"] b''
  error keeps the entry ! NotFoundError: Error code: 404 - {"message":"gone"} [operation_id='getUser', status_code=404, body=Error(message='gone'), body_bytes=b'{"message":"gone"}', truncated=False]
  > GET https://api.example.com/users/11
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "k"] b''
  decode failure keeps the entry ! DecodeError: DecodeError(status_code=200, operation_id='getUser', reason='invalid_value') [operation_id='getUser', body_bytes=b'{"id":"x"}', truncated=False, cause=2 validation errors for User
id
  Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='x', input_type=str]
    For further information visit https://errors.pydantic.dev/<version>/v/int_parsing
name
  Field required [type=missing, input_value={'id': 'x'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/<version>/v/missing] invalid_value
  > GET https://api.example.com/users/11
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "k"] b''
  entry still revalidates = revalidated 11:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=0'), ('content-type', 'application/json'), ('etag', '"k"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/12
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users/13
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  redirected = network 13:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/12
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users/13
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  redirected again = network 13:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/14
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  stored before a redirect = network 14:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"r"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/14
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "r"] b''
  > GET https://api.example.com/users/15
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "r"] b''
  304 after a redirect ! ProtocolDataError: ProtocolDataError(operation_id='getUser', reason='inconsistent') [operation_id='getUser'] inconsistent
  > GET https://api.example.com/users/16
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  directives stored = network 16:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"f"'), ('cache-control', 'max-age=60'), ('age', '30'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/16
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, cache-control: max-age=10, if-none-match: "f"] b''
  request max-age=10 = revalidated 16:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('etag', '"f"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/16
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, cache-control: no-cache, if-none-match: "f"] b''
  request no-cache = revalidated 16:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('etag', '"f"'), ('Content-Length', '22')]
  request max-age=3600 = fresh_cache 16:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('etag', '"f"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/16
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, cache-control: no-store] b''
  request no-store = network 16:other status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-length', '24'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/16
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, cache-control: no-store, if-none-match: "f"] b''
  request no-store 304 ! ProtocolDataError: ProtocolDataError(operation_id='getUser', reason='inconsistent') [operation_id='getUser'] inconsistent
  request only-if-cached ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='headers.Cache-Control') [field_path=('headers', 'Cache-Control')] invalid_value
  request no-cache value ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='headers.Cache-Control') [field_path=('headers', 'Cache-Control')] invalid_value
  request bad max-age ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='headers.Cache-Control') [field_path=('headers', 'Cache-Control')] invalid_value
  request malformed ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='headers.Cache-Control') [field_path=('headers', 'Cache-Control')] invalid_value
  request range ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='headers.Range') [field_path=('headers', 'Range')] invalid_value
  request if-match ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='headers.If-Match') [field_path=('headers', 'If-Match')] invalid_value
  still fresh = fresh_cache 16:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('content-type', 'application/json'), ('etag', '"f"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/17
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  validators stored = network 17:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"g"'), ('cache-control', 'max-age=0'), ('last-modified', 'Wed, 21 Oct 2015 07:28:00 GMT'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/17
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "g"] b''
  matching caller validator = revalidated 17:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=0'), ('last-modified', 'Wed, 21 Oct 2015 07:28:00 GMT'), ('content-type', 'application/json'), ('etag', '"g"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/17
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-modified-since: Wed, 21 Oct 2015 07:28:00 GMT, if-none-match: "g"] b''
  matching caller date = revalidated 17:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=0'), ('last-modified', 'Wed, 21 Oct 2015 07:28:00 GMT'), ('content-type', 'application/json'), ('etag', '"g"'), ('Content-Length', '22')]
  other caller validator ! ConfigurationError: ConfigurationError(reason='binding_mismatch', field_path='If-None-Match') [field_path=('If-None-Match',)] binding_mismatch
  other caller date ! ConfigurationError: ConfigurationError(reason='binding_mismatch', field_path='If-Modified-Since') [field_path=('If-Modified-Since',)] binding_mismatch
  > GET https://api.example.com/users/18
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "g"] b''
  cold 304 ! ProtocolDataError: ProtocolDataError(operation_id='getUser', reason='inconsistent') [operation_id='getUser'] inconsistent
  > GET https://api.example.com/users/30
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users/30
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, authorization: Challenge answered] b''
  unstored after an auth challenge = network 30:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"h"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/30
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users/30
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, authorization: Challenge answered] b''
  sent again after an auth challenge = network 30:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"h"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/20
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  async miss = network 20:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"a"'), ('cache-control', 'max-age=0'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/20
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "a"] b''
  async revalidated = revalidated 20:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('content-type', 'application/json'), ('etag', '"a"'), ('cache-control', 'max-age=60'), ('Content-Length', '22')]
  async fresh = fresh_cache 20:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('content-type', 'application/json'), ('etag', '"a"'), ('cache-control', 'max-age=60'), ('Content-Length', '22')]
  > GET https://api.example.com/users/20
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, cache-control: no-cache, if-none-match: "a"] b''
  async removed = network 20:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('cache-control', 'no-store'), ('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/20
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  async error ! NotFoundError: Error code: 404 - {"message":"no"} [operation_id='getUser', status_code=404, body=Error(message='no'), body_bytes=b'{"message":"no"}', truncated=False]
  > GET https://api.example.com/users/20
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, cache-control: no-store] b''
  async request no-store = network 20:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/21
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  async no validator or freshness = network 21:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
  > GET https://api.example.com/users/21
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  async uncacheable fetched again = network 21:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('content-length', '22'), ('content-type', 'application/json')]
freshness on the client clock
  > GET https://api.example.com/users/50
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  dated miss = network 50:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"w"'), ('cache-control', 'max-age=60'), ('date', 'Sun, 09 Sep 2001 01:46:40 GMT'), ('age', '30'), ('content-length', '22'), ('content-type', 'application/json')]
  fresh until max-age less its age = fresh_cache 50:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('etag', '"w"'), ('cache-control', 'max-age=60'), ('date', 'Sun, 09 Sep 2001 01:46:40 GMT'), ('content-type', 'application/json'), ('Content-Length', '22')]
  > GET https://api.example.com/users/50
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "w"] b''
  stale past max-age = revalidated 50:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('date', 'Sun, 09 Sep 2001 01:46:40 GMT'), ('content-type', 'application/json'), ('etag', '"w"'), ('Content-Length', '22')]
  > GET https://api.example.com/users/51
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  async dated miss = network 51:cat status=200 network=200 attempts=1 type=application/json request_id=None headers=[('etag', '"x"'), ('cache-control', 'max-age=60'), ('date', 'Sun, 09 Sep 2001 01:46:40 GMT'), ('age', '30'), ('content-length', '22'), ('content-type', 'application/json')]
  async fresh until max-age less its age = fresh_cache 51:cat status=200 network=None attempts=0 type=application/json request_id=None headers=[('etag', '"x"'), ('cache-control', 'max-age=60'), ('date', 'Sun, 09 Sep 2001 01:46:40 GMT'), ('content-type', 'application/json'), ('Content-Length', '22')]
  > GET https://api.example.com/users/51
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, if-none-match: "x"] b''
  async stale past max-age = revalidated 51:cat status=200 network=304 attempts=1 type=application/json request_id=None headers=[('cache-control', 'max-age=60'), ('date', 'Sun, 09 Sep 2001 01:46:40 GMT'), ('content-type', 'application/json'), ('etag', '"x"'), ('Content-Length', '22')]
