Skip to content

fix: cache truncated#46

Open
neurosnap wants to merge 1 commit intodarkweak:mainfrom
picosh:main
Open

fix: cache truncated#46
neurosnap wants to merge 1 commit intodarkweak:mainfrom
picosh:main

Conversation

@neurosnap
Copy link

@neurosnap neurosnap commented Feb 18, 2026

Fixes #41

This feels like a weird solution but it fixed it in our usage of souin for http caching. It seems like when we run io.Copy with souin's response handler there's a race condition when http.ReadResponse is "done" before all the data makes it into the buffer.

@gucci-on-fleek
Copy link

This unfortunately doesn't seem to have solved the problem for me.

Server Transcript
$ xcaddy build v2.11.1 --with=github.com/caddyserver/cache-handler@v0.16.0 --with=github.com/darkweak/storages/otter/caddy=github.com/picosh/storages/otter/caddy@main
[...]

$ ./caddy build-info
go      go1.25.7 X:nodwarf5
path    caddy
mod     caddy   (devel)
dep     cel.dev/expr    v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=
dep     cloud.google.com/go/auth        v0.18.1 h1:IwTEx92GFUo2pJ6Qea0EU3zYvKnTAeRCODxfA/G5UWs=
dep     cloud.google.com/go/auth/oauth2adapt    v0.2.8  h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
dep     cloud.google.com/go/compute/metadata    v0.9.0  h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
dep     dario.cat/mergo v1.0.2  h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
dep     filippo.io/bigmod       v0.1.0  h1:UNzDk7y9ADKST+axd9skUpBQeW7fG2KrTZyOE4uGQy8=
dep     filippo.io/edwards25519 v1.2.0  h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo=
dep     github.com/BurntSushi/toml      v1.6.0  h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=
dep     github.com/DeRuina/timberjack   v1.3.9  h1:6UXZ1I7ExPGTX/1UNYawR58LlOJUHKBPiYC7WQ91eBo=
dep     github.com/KimMachineGun/automemlimit   v0.7.5  h1:RkbaC0MwhjL1ZuBKunGDjE/ggwAX43DwZrJqVwyveTk=
dep     github.com/Masterminds/goutils  v1.1.1  h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
dep     github.com/Masterminds/semver/v3        v3.4.0  h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
dep     github.com/Masterminds/sprig/v3 v3.3.0  h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
dep     github.com/alecthomas/chroma/v2 v2.23.1 h1:nv2AVZdTyClGbVQkIzlDm/rnhk1E9bU9nXwmZ/Vk/iY=
dep     github.com/antlr4-go/antlr/v4   v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
dep     github.com/aryann/difflib       v0.0.0-20210328193216-ff5ff6dc229b      h1:uUXgbcPDK3KpW29o4iy7GtuappbWT0l5NaMo9H9pJDw=
dep     github.com/beorn7/perks v1.0.1  h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
dep     github.com/caddyserver/cache-handler    v0.16.0 h1:0Tl7yXwxpT1Hsp9bqIdB5Uhh4oOyy+z1V0MIjmVm1yI=
dep     github.com/caddyserver/caddy/v2 v2.11.1 h1:C7sQpsFOC5CH+31KqJc7EoOf8mXrOEkFyYd6GpIqm/s=
dep     github.com/caddyserver/certmagic        v0.25.2 h1:D7xcS7ggX/WEY54x0czj7ioTkmDWKIgxtIi2OcQclUc=
dep     github.com/caddyserver/zerossl  v0.1.5  h1:dkvOjBAEEtY6LIGAHei7sw2UgqSD6TrWweXpV7lvEvE=
dep     github.com/ccoveille/go-safecast/v2     v2.0.0  h1:+5eyITXAUj3wMjad6cRVJKGnC7vDS55zk0INzJagub0=
dep     github.com/cenkalti/backoff/v5  v5.0.3  h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
dep     github.com/cespare/xxhash/v2    v2.3.0  h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
dep     github.com/chzyer/readline      v1.5.1  h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
dep     github.com/cloudflare/circl     v1.6.3  h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
dep     github.com/coreos/go-oidc/v3    v3.17.0 h1:hWBGaQfbi0iVviX4ibC7bk8OKT5qNr4klBaCHVNvehc=
dep     github.com/cpuguy83/go-md2man/v2        v2.0.7  h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
dep     github.com/darkweak/go-esi      v0.0.5  h1:b9LHI8Tz46R+i6p8avKPHAIBRQUCZDebNmKm5w/Zrns=
dep     github.com/darkweak/souin       v1.7.7  h1:pIj/cknEsV/+xgq74VOGE1+0yy0dNnt5I6HGRczJlKk=
dep     github.com/darkweak/storages/core       v0.0.18 h1:qE9vQb31of3f1a4Zm9/uvnamyJdecRNvtK60A4DNWKE=
dep     github.com/darkweak/storages/otter      v0.0.18 h1:vBKLH51/dbZ3FaGmdqF6mWwwwxl0B5rlrE/2rSAlkYM=
dep     github.com/darkweak/storages/otter/caddy        v0.0.18
=>      github.com/picosh/storages/otter/caddy  v0.0.0-20260218032246-c90e86da8875      h1:oQ8QHYHcVRYZfTnh+xyKIdTDhs3uj0jjVOoxnL90IQM=

dep     github.com/dlclark/regexp2      v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
dep     github.com/dolthub/maphash      v0.1.0  h1:bsQ7JsF4FkkWyrP3oCnFJgrCUAFbFf3kOl4L/QxPDyQ=
dep     github.com/dustin/go-humanize   v1.0.1  h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
dep     github.com/felixge/httpsnoop    v1.0.4  h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
dep     github.com/fxamacker/cbor/v2    v2.9.0  h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
dep     github.com/gammazero/deque      v0.2.1  h1:qSdsbG6pgp6nL7A0+K/B7s12mcCY/5l5SIUpMOl+dC0=
dep     github.com/go-chi/chi/v5        v5.2.5  h1:Eg4myHZBjyvJmAFjFvWgrqDTXFyOzjj7YIm3L3mu6Ug=
dep     github.com/go-jose/go-jose/v3   v3.0.4  h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY=
dep     github.com/go-jose/go-jose/v4   v4.1.3  h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs=
dep     github.com/go-logr/logr v1.4.3  h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
dep     github.com/go-logr/stdr v1.2.2  h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
dep     github.com/google/cel-go        v0.27.0 h1:e7ih85+4qVrBuqQWTW4FKSqZYokVuc3HnhH5keboFTo=
dep     github.com/google/certificate-transparency-go   v1.1.8-0.20240110162603-74a5dd331745    h1:heyoXNxkRT155x4jTAiSv5BVSVkueifPUm+Q8LUXMRo=
dep     github.com/google/go-tpm        v0.9.8  h1:slArAR9Ft+1ybZu0lBwpSmpwhRXaa85hWtMinMyRAWo=
dep     github.com/google/go-tspi       v0.3.0  h1:ADtq8RKfP+jrTyIWIZDIYcKOMecRqNJFOew2IT0Inus=
dep     github.com/google/s2a-go        v0.1.9  h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
dep     github.com/google/uuid  v1.6.0  h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
dep     github.com/googleapis/enterprise-certificate-proxy      v0.3.11 h1:vAe81Msw+8tKUxi2Dqh/NZMz7475yUvmRIkXr4oN2ao=
dep     github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc=
dep     github.com/grpc-ecosystem/grpc-gateway/v2       v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak=
dep     github.com/huandu/xstrings      v1.5.0  h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
dep     github.com/klauspost/compress   v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c=
dep     github.com/klauspost/cpuid/v2   v2.3.0  h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
dep     github.com/libdns/libdns        v1.1.1  h1:wPrHrXILoSHKWJKGd0EiAVmiJbFShguILTg9leS/P/U=
dep     github.com/manifoldco/promptui  v0.9.0  h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA=
dep     github.com/mattn/go-colorable   v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
dep     github.com/mattn/go-isatty      v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
dep     github.com/maypok86/otter       v1.2.4  h1:HhW1Pq6VdJkmWwcZZq19BlEQkHtI8xgsQzBVXJU0nfc=
dep     github.com/mgutz/ansi   v0.0.0-20200706080929-d51e80ef957d      h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
dep     github.com/mholt/acmez/v3       v3.1.6  h1:eGVQNObP0pBN4sxqrXeg7MYqTOWyoiYpQqITVWlrevk=
dep     github.com/miekg/dns    v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI=
dep     github.com/mitchellh/copystructure      v1.2.0  h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
dep     github.com/mitchellh/go-ps      v1.0.0  h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
dep     github.com/mitchellh/reflectwalk        v1.0.2  h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
dep     github.com/munnerz/goautoneg    v0.0.0-20191010083416-a7dc8b61c822      h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
dep     github.com/pbnjay/memory        v0.0.0-20210728143218-7b4eea64cf58      h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0=
dep     github.com/pierrec/lz4/v4       v4.1.23 h1:oJE7T90aYBGtFNrI8+KbETnPymobAhzRrR8Mu8n1yfU=
dep     github.com/pires/go-proxyproto  v0.11.0 h1:gUQpS85X/VJMdUsYyEgyn59uLJvGqPhJV5YvG68wXH4=
dep     github.com/pkg/errors   v0.9.1  h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
dep     github.com/pquerna/cachecontrol v0.2.0  h1:vBXSNuE5MYP9IJ5kjsdo8uq+w41jSPgvba2DEnkRx9k=
dep     github.com/prometheus/client_golang     v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
dep     github.com/prometheus/client_model      v0.6.2  h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
dep     github.com/prometheus/common    v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4=
dep     github.com/prometheus/otlptranslator    v1.0.0  h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEoIwkU+A6qos=
dep     github.com/prometheus/procfs    v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws=
dep     github.com/quic-go/qpack        v0.6.0  h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
dep     github.com/quic-go/quic-go      v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw=
dep     github.com/rs/xid       v1.6.0  h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
dep     github.com/russross/blackfriday/v2      v2.1.0  h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
dep     github.com/shopspring/decimal   v1.4.0  h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
dep     github.com/shurcooL/sanitized_anchor_name       v1.0.0  h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
dep     github.com/sirupsen/logrus      v1.9.4  h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=
dep     github.com/slackhq/nebula       v1.10.3 h1:EstYj8ODEcv6T0R9X5BVq1zgWZnyU5gtPzk99QF1PMU=
dep     github.com/smallstep/certificates       v0.30.0-rc2.0.20260211214201-20608299c29c       h1:XQpX0IPYUAoJ661YlgfOJmY48ZOhIbglw4E2gw9mcyc=
dep     github.com/smallstep/cli-utils  v0.12.2 h1:lGzM9PJrH/qawbzMC/s2SvgLdJPKDWKwKzx9doCVO+k=
dep     github.com/smallstep/go-attestation     v0.4.4-0.20241119153605-2306d5b464ca    h1:VX8L0r8vybH0bPeaIxh4NQzafKQiqvlOn8pmOXbFLO4=
dep     github.com/smallstep/linkedca   v0.25.0 h1:txT9QHGbCsJq0MhAghBq7qhurGY727tQuqUi+n4BVBo=
dep     github.com/smallstep/nosql      v0.7.0  h1:YiWC9ZAHcrLCrayfaF+QJUv16I2bZ7KdLC3RpJcnAnE=
dep     github.com/smallstep/pkcs7      v0.2.1  h1:6Kfzr/QizdIuB6LSv8y1LJdZ3aPSfTNhTLqAx9CTLfA=
dep     github.com/smallstep/scep       v0.0.0-20250318231241-a25cabb69492      h1:k23+s51sgYix4Zgbvpmy+1ZgXLjr4ZTkBTqXmpnImwA=
dep     github.com/smallstep/truststore v0.13.0 h1:90if9htAOblavbMeWlqNLnO9bsjjgVv2hQeQJCi/py4=
dep     github.com/spf13/cast   v1.7.0  h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
dep     github.com/spf13/cobra  v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
dep     github.com/spf13/pflag  v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
dep     github.com/tailscale/tscert     v0.0.0-20251216020129-aea342f6d747      h1:RnBbFMmodYzhC6adOjTbtUQXyzV8dcvKYbolzs6Qch0=
dep     github.com/urfave/cli   v1.22.17        h1:SYzXoiPfQjHBbkYxbew5prZHS1TOLT3ierW8SYLqtVQ=
dep     github.com/x448/float16 v0.8.4  h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
dep     github.com/yuin/goldmark        v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE=
dep     github.com/yuin/goldmark-highlighting/v2        v2.0.0-20230729083705-37449abec8cc      h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ=
dep     github.com/zeebo/blake3 v0.2.4  h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI=
dep     go.etcd.io/bbolt        v1.3.10 h1:+BqfJTcCzTItrop8mq/lbzL8wSGtj94UO/3U31shqG0=
dep     go.opentelemetry.io/auto/sdk    v1.2.1  h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
dep     go.opentelemetry.io/contrib/bridges/prometheus  v0.65.0 h1:I/7S/yWobR3QHFLqHsJ8QOndoiFsj1VgHpQiq43KlUI=
dep     go.opentelemetry.io/contrib/exporters/autoexport        v0.65.0 h1:2gApdml7SznX9szEKFjKjM4qGcGSvAybYLBY319XG3g=
dep     go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp   v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8=
dep     go.opentelemetry.io/contrib/propagators/autoprop        v0.65.0 h1:kTaCycF9Xkm8VBBvH0rJ4wFeRjtIV55Erk3uuVsIs5s=
dep     go.opentelemetry.io/contrib/propagators/aws     v1.40.0 h1:4VIrh75jW4RTimUNx1DSk+6H9/nDr1FvmKoOVDh3K04=
dep     go.opentelemetry.io/contrib/propagators/b3      v1.40.0 h1:xariChe8OOVF3rNlfzGFgQc61npQmXhzZj/i82mxMfg=
dep     go.opentelemetry.io/contrib/propagators/jaeger  v1.40.0 h1:aXl9uobjJs5vquMLt9ZkI/3zIuz8XQ3TqOKSWx0/xdU=
dep     go.opentelemetry.io/contrib/propagators/ot      v1.40.0 h1:Lon8J5SPmWaL1Ko2TIlCNHJ42/J1b5XbJlgJaE/9m7I=
dep     go.opentelemetry.io/otel        v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms=
dep     go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc     v0.16.0 h1:ZVg+kCXxd9LtAaQNKBxAvJ5NpMf7LpvEr4MIZqb0TMQ=
dep     go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp     v0.16.0 h1:djrxvDxAe44mJUrKataUbOhCKhR3F8QCyWucO16hTQs=
dep     go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc       v1.40.0 h1:NOyNnS19BF2SUDApbOKbDtWZ0IK7b8FJ2uAGdIWOGb0=
dep     go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp       v1.40.0 h1:9y5sHvAxWzft1WQ4BwqcvA+IFVUJ1Ya75mSAUnFEVwE=
dep     go.opentelemetry.io/otel/exporters/otlp/otlptrace       v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs=
dep     go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I=
dep     go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc=
dep     go.opentelemetry.io/otel/exporters/prometheus   v0.62.0 h1:krvC4JMfIOVdEuNPTtQ0ZjCiXrybhv+uOHMfHRmnvVo=
dep     go.opentelemetry.io/otel/exporters/stdout/stdoutlog     v0.16.0 h1:ivlbaajBWJqhcCPniDqDJmRwj4lc6sRT+dCAVKNmxlQ=
dep     go.opentelemetry.io/otel/exporters/stdout/stdoutmetric  v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0=
dep     go.opentelemetry.io/otel/exporters/stdout/stdouttrace   v1.40.0 h1:MzfofMZN8ulNqobCmCAVbqVL5syHw+eB2qPRkCMA/fQ=
dep     go.opentelemetry.io/otel/log    v0.16.0 h1:DeuBPqCi6pQwtCK0pO4fvMB5eBq6sNxEnuTs88pjsN4=
dep     go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g=
dep     go.opentelemetry.io/otel/sdk    v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8=
dep     go.opentelemetry.io/otel/sdk/log        v0.16.0 h1:e/b4bdlQwC5fnGtG3dlXUrNOnP7c8YLVSpSfEBIkTnI=
dep     go.opentelemetry.io/otel/sdk/metric     v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw=
dep     go.opentelemetry.io/otel/trace  v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw=
dep     go.opentelemetry.io/proto/otlp  v1.9.0  h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A=
dep     go.step.sm/crypto       v0.76.2 h1:JJ/yMcs/rmcCAwlo+afrHjq74XBFRTJw5B2y4Q4Z4c4=
dep     go.uber.org/automaxprocs        v1.6.0  h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
dep     go.uber.org/multierr    v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
dep     go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
dep     go.uber.org/zap/exp     v0.3.0  h1:6JYzdifzYkGmTdRR59oYH+Ng7k49H9qVpWwNSsGJj3U=
dep     go.yaml.in/yaml/v2      v2.4.3  h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
dep     go.yaml.in/yaml/v3      v3.0.4  h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
dep     golang.org/x/crypto     v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
dep     golang.org/x/crypto/x509roots/fallback  v0.0.0-20260213171211-a408498e5541      h1:FmKxj9ocLKn45jiR2jQMwCVhDvaK7fKQFzfuT9GvyK8=
dep     golang.org/x/exp        v0.0.0-20251023183803-a4bb9ffd2546      h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY=
dep     golang.org/x/net        v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60=
dep     golang.org/x/oauth2     v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
dep     golang.org/x/sync       v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
dep     golang.org/x/sys        v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
dep     golang.org/x/term       v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg=
dep     golang.org/x/text       v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
dep     golang.org/x/time       v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
dep     google.golang.org/api   v0.265.0        h1:FZvfUdI8nfmuNrE34aOWFPmLC+qRBEiNm3JdivTvAAU=
dep     google.golang.org/genproto/googleapis/api       v0.0.0-20260128011058-8636f8732409      h1:merA0rdPeUV3YIIfHHcH4qBkiQAc1nfCKSI7lB4cV2M=
dep     google.golang.org/genproto/googleapis/rpc       v0.0.0-20260128011058-8636f8732409      h1:H86B94AW+VfJWDqFeEbBPhEtHzJwJfTbgE2lZa54ZAQ=
dep     google.golang.org/grpc  v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
dep     google.golang.org/protobuf      v1.36.11        h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
dep     gopkg.in/yaml.v3        v3.0.1  h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
build   -buildmode=exe
build   -compiler=gc
build   -tags=nobadger,nomysql,nopgx
build   -trimpath=true
build   CGO_ENABLED=0
build   GOARCH=amd64
build   GOEXPERIMENT=nodwarf5
build   GOOS=linux
build   GOAMD64=v1


$ cat Caddyfile
{
        log {
                output stderr
                format console
                level DEBUG
        }

        cache {
                otter
        }
}

localhost {
        log {
                output stderr
                format console
                level DEBUG
        }

        header {
                ?Cache-Control max-age=3600
        }

        cache

        file_server
}

$ ./caddy run --config=./Caddyfile
2026/02/27 05:18:03.419 INFO    maxprocs: Leaving GOMAXPROCS=16: CPU quota undefined
2026/02/27 05:18:03.419 INFO    GOMEMLIMIT is updated   {"GOMEMLIMIT": 29652395212, "previous": 9223372036854775807}
2026/02/27 05:18:03.419 INFO    using config from file  {"file": "./Caddyfile"}
2026/02/27 05:18:03.419 INFO    adapted config to JSON  {"adapter": "caddyfile"}
2026/02/27 05:18:03.419 INFO    admin   admin endpoint started  {"address": "localhost:2019", "enforce_origin": false, "origins": ["//[::1]:2019", "//127.0.0.1:2019", "//localhost:2019"]}
2026/02/27 05:18:03.419 INFO    http.auto_https server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS      {"server_name": "srv0", "https_port": 443}
2026/02/27 05:18:03.419 INFO    http.auto_https enabling automatic HTTP->HTTPS redirects        {"server_name": "srv0"}
2026/02/27 05:18:03.419 INFO    tls.cache.maintenance   started background certificate maintenance      {"cache": "0xc00028ba00"}
2026/02/27 05:18:03.420 DEBUG   http.auto_https adjusted config {"tls": {"automation":{"policies":[{"subjects":["localhost"]},{}]}}, "http": {"servers":{"remaining_auto_https_redirects":{"listen":[":80"],"routes":[{},{}],"logs":{"logger_names":{"localhost":["log0"]}}},"srv0":{"listen":[":443"],"routes":[{"handle":[{"handler":"subroute","routes":[{"handle":[{"handler":"headers","response":{"require":{"headers":{"Cache-Control":null}},"set":{"Cache-Control":["max-age=3600"]}}},{"Configuration":{"API":{"basepath":"","debug":{"basepath":"","enable":false,"security":false},"prometheus":{"basepath":"","enable":false,"security":false},"security":{"basepath":"","enable":false,"secret":"","users":null},"souin":{"basepath":"","enable":false,"security":false}},"DefaultCache":{"allowed_additional_status_codes":null,"allowed_http_verbs":[],"badger":null,"cache_name":"","cdn":{},"default_cache_control":"","disable_coalescing":false,"distributed":false,"etcd":null,"headers":null,"key":{},"max_cacheable_body_bytes":0,"mode":"","nats":null,"nuts":null,"olric":null,"otter":null,"redis":null,"regex":{"exclude":""},"simplefs":null,"stale":"0s","storers":null,"timeout":{"backend":"0s","cache":"0s"},"ttl":"0s"},"LogLevel":"","SurrogateKeyDisabled":false,"SurrogateKeys":null,"URLs":null,"cache_keys":{}},"badger":null,"etcd":null,"handler":"cache","key":{},"nats":null,"nuts":null,"olric":null,"otter":null,"redis":null,"simplefs":null,"stale":"0s","timeout":{"backend":"0s","cache":"0s"},"ttl":"0s"},{"handler":"file_server","hide":["./Caddyfile"]}]}]}],"terminal":true}],"tls_connection_policies":[{}],"automatic_https":{},"logs":{"logger_names":{"localhost":["log0"]}}}}}}
2026/02/27 05:18:03.420 INFO    storages.cache.otter    otter.storage.size 10000
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     You're running Souin with the following storages in this order OTTER
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     Storer initialized: []types.Storer{(*otter.Otter)(0xc00047b000)}.
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     Try to load the storer OTTER-0s as surrogate backend
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     Surrogate storage initialized.
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     Set Souin as Cache-Status name
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     Allow 2 method(s). [GET HEAD].
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     The cache logic will run as : &{Strict:true Bypass_request:false Bypass_response:false}
2026/02/27 05:18:03.420 INFO    http.handlers.cache     Set backend timeout to 10s
2026/02/27 05:18:03.420 INFO    http.handlers.cache     Set cache timeout to 10ms
2026/02/27 05:18:03.420 INFO    http.handlers.cache     Souin configuration is now loaded.
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     registering mapping eviction for storer OTTER
2026/02/27 05:18:03.420 DEBUG   http.handlers.cache     run mapping eviction for storer OTTER
2026/02/27 05:18:03.420 DEBUG   http    starting server loop    {"address": "[::]:443", "tls": true, "http3": false}
2026/02/27 05:18:03.420 INFO    http    enabling HTTP/3 listener        {"addr": ":443"}
2026/02/27 05:18:03.420 INFO    http.log        server running  {"name": "srv0", "protocols": ["h1", "h2", "h3"]}
2026/02/27 05:18:03.420 DEBUG   http    starting server loop    {"address": "[::]:80", "tls": false, "http3": false}
2026/02/27 05:18:03.420 WARN    http    HTTP/2 skipped because it requires TLS  {"network": "tcp", "addr": ":80"}
2026/02/27 05:18:03.420 WARN    http    HTTP/3 skipped because it requires TLS  {"network": "tcp", "addr": ":80"}
2026/02/27 05:18:03.420 INFO    http.log        server running  {"name": "remaining_auto_https_redirects", "protocols": ["h1", "h2", "h3"]}
2026/02/27 05:18:03.420 INFO    http    enabling automatic TLS certificate management   {"domains": ["localhost"]}
2026/02/27 05:18:03.421 WARN    tls     stapling OCSP   {"identifiers": ["localhost"]}
2026/02/27 05:18:03.421 DEBUG   tls.cache       added certificate to cache      {"subjects": ["localhost"], "expiration": "2026/02/27 17:15:07.000", "managed": true, "issuer_key": "local", "hash": "08c4c9f922d6b2bb454735132566ef48af64a89276c51a70ea302f97abf0d68e", "cache_size": 1, "cache_capacity": 10000}
2026/02/27 05:18:03.421 DEBUG   events  event   {"name": "cached_managed_cert", "id": "2be6a77e-7cd1-481b-a2bc-482430f6083b", "origin": "tls", "data": {"sans":["localhost"]}}
2026/02/27 05:18:03.421 INFO    pki.ca.local    root certificate is already trusted by system   {"path": "storage:pki/authorities/local/root.crt"}
2026/02/27 05:18:03.421 DEBUG   events  event   {"name": "started", "id": "34eab919-9f72-475a-a6f2-5dd228620fae", "origin": "", "data": null}
2026/02/27 05:18:03.421 INFO    autosaved config (load with --resume flag)      {"file": "/home/max/.config/caddy/autosave.json"}
2026/02/27 05:18:03.421 INFO    serving initial configuration
2026/02/27 05:18:03.425 INFO    tls     storage cleaning happened too recently; skipping for now        {"storage": "FileStorage:/home/max/.local/share/caddy", "instance": "d8cf091d-5eb6-4e73-892e-f97970c6d66b", "try_again": "2026/02/28 05:18:03.425", "try_again_in": 86399.99999971}
2026/02/27 05:18:03.425 INFO    tls     finished cleaning storage units
2026/02/27 05:18:13.852 DEBUG   events  event   {"name": "tls_get_certificate", "id": "a6b8e0e0-5572-4d33-94fb-8babdb194811", "origin": "tls", "data": {"client_hello":{"CipherSuites":[4866,4867,4865,4868,49196,49200,52393,52392,49325,49195,49199,49324,49187,49191,49162,49172,49161,49171,157,49309,156,49308,61,60,53,47,159,52394,49311,158,49310,107,103,57,51],"ServerName":"localhost","SupportedCurves":[4588,4587,4589,29,23,30,25,24,256,257,258,259,260],"SupportedPoints":"AAEC","SignatureSchemes":[2308,2309,2310,1027,1283,1539,2055,2056,2057,2058,2059,2052,2053,2054,1025,1281,1537,771,769],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[772,771],"RemoteAddr":{"IP":"::1","Port":35588,"Zone":""},"LocalAddr":{"IP":"::1","Port":443,"Zone":""}}}}
2026/02/27 05:18:13.853 DEBUG   tls.handshake   choosing certificate    {"identifier": "localhost", "num_choices": 1}
2026/02/27 05:18:13.853 DEBUG   tls.handshake   default certificate selection results   {"identifier": "localhost", "subjects": ["localhost"], "managed": true, "issuer_key": "local", "hash": "08c4c9f922d6b2bb454735132566ef48af64a89276c51a70ea302f97abf0d68e"}
2026/02/27 05:18:13.853 DEBUG   tls.handshake   matched certificate in cache    {"remote_ip": "::1", "remote_port": "35588", "subjects": ["localhost"], "managed": true, "expiration": "2026/02/27 17:15:07.000", "hash": "08c4c9f922d6b2bb454735132566ef48af64a89276c51a70ea302f97abf0d68e"}
2026/02/27 05:18:13.855 DEBUG   http.handlers.cache     Incomming request &{Method:GET URL:/words.txt Proto:HTTP/2.0 ProtoMajor:2 ProtoMinor:0 Header:map[Accept:[*/*] User-Agent:[curl/8.15.0]] Body:0xc00042a150 GetBody:<nil> ContentLength:0 TransferEncoding:[] Close:false Host:localhost Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr:[::1]:35588 RequestURI:/words.txt TLS:0xc000362540 Cancel:<nil> Response:<nil> Pattern: ctx:0xc000624570 pat:<nil> matches:[] otherValues:map[]}
2026/02/27 05:18:13.855 DEBUG   http.handlers.cache     Request cache-control &{MaxAge:-1 MaxStale:-1 MaxStaleSet:false MinFresh:-1 NoCache:false NoStore:false NoTransform:false OnlyIfCached:false StaleIfError:0 Extensions:[]}
2026/02/27 05:18:13.855 DEBUG   storages.cache.otter    Impossible to get the mapping key IDX_GET-https-localhost-/words.txt in Otter
2026/02/27 05:18:13.855 DEBUG   http.handlers.cache     Request the upstream server
2026/02/27 05:18:13.855 DEBUG   http.handlers.file_server       sanitized path join     {"site_root": ".", "fs": "", "request_path": "/words.txt", "result": "words.txt"}
2026/02/27 05:18:13.855 DEBUG   http.handlers.file_server       opening file    {"filename": "words.txt"}
2026/02/27 05:18:13.870 DEBUG   http.handlers.cache     Response cache-control &{MustRevalidate:false NoCache:map[] NoCachePresent:false NoStore:false NoTransform:false Public:false Private:map[] PrivatePresent:false ProxyRevalidate:false MaxAge:-1 SMaxAge:-1 Immutable:false StaleIfError:-1 StaleWhileRevalidate:-1 Extensions:[]}
2026/02/27 05:18:13.886 DEBUG   http.handlers.cache     Store the response for GET-https-localhost-/words.txt{-VARY-}Accept-Encoding: with duration 1m59.128929247s
2026/02/27 05:18:13.910 DEBUG   storages.cache.otter    Store the new mapping for the key GET-https-localhost-/words.txt{-VARY-}Accept-Encoding: in Otter
2026/02/27 05:18:13.910 DEBUG   http.handlers.cache     Stored the key GET-https-localhost-/words.txt{-VARY-}Accept-Encoding: in the OTTER provider
2026/02/27 05:18:13.911 DEBUG   storages.cache.otter    Impossible to get the key SURROGATE_ in Otter
2026/02/27 05:18:13.911 DEBUG   http.handlers.cache     Store the tag
2026/02/27 05:18:13.911 DEBUG   storages.cache.otter    Impossible to get the key SURROGATE_/words.txt in Otter
2026/02/27 05:18:13.911 DEBUG   http.handlers.cache     Store the tag /words.txt
2026/02/27 05:18:13.922 INFO    http.log.access.log0    handled request {"request": {"remote_ip": "::1", "remote_port": "35588", "client_ip": "::1", "proto": "HTTP/2.0", "method": "GET", "host": "localhost", "uri": "/words.txt", "headers": {"User-Agent": ["curl/8.15.0"], "Accept": ["*/*"]}, "tls": {"resumed": false, "version": 772, "cipher_suite": 4865, "proto": "h2", "server_name": "localhost", "ech": false}}, "bytes_read": 0, "user_id": "", "duration": 0.066678541, "size": 4953557, "status": 200, "resp_headers": {"Cache-Status": ["Souin; fwd=uri-miss; stored; key=GET-https-localhost-/words.txt"], "Server": ["Caddy"], "Vary": ["Accept-Encoding"], "Etag": ["\"dfkvzzahjwba2y66t\""], "Content-Type": [], "Content-Length": ["4953557"], "Cache-Control": [""], "Alt-Svc": ["h3=\":443\"; ma=2592000"], "Last-Modified": ["Sat, 10 Jan 2026 11:53:19 GMT"], "Accept-Ranges": ["bytes"]}}
2026/02/27 05:18:16.628 DEBUG   events  event   {"name": "tls_get_certificate", "id": "22d5f110-8406-4cef-a79b-4f0a4cb155fa", "origin": "tls", "data": {"client_hello":{"CipherSuites":[4866,4867,4865,4868,49196,49200,52393,52392,49325,49195,49199,49324,49187,49191,49162,49172,49161,49171,157,49309,156,49308,61,60,53,47,159,52394,49311,158,49310,107,103,57,51],"ServerName":"localhost","SupportedCurves":[4588,4587,4589,29,23,30,25,24,256,257,258,259,260],"SupportedPoints":"AAEC","SignatureSchemes":[2308,2309,2310,1027,1283,1539,2055,2056,2057,2058,2059,2052,2053,2054,1025,1281,1537,771,769],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[772,771],"RemoteAddr":{"IP":"::1","Port":59654,"Zone":""},"LocalAddr":{"IP":"::1","Port":443,"Zone":""}}}}
2026/02/27 05:18:16.628 DEBUG   tls.handshake   choosing certificate    {"identifier": "localhost", "num_choices": 1}
2026/02/27 05:18:16.628 DEBUG   tls.handshake   default certificate selection results   {"identifier": "localhost", "subjects": ["localhost"], "managed": true, "issuer_key": "local", "hash": "08c4c9f922d6b2bb454735132566ef48af64a89276c51a70ea302f97abf0d68e"}
2026/02/27 05:18:16.628 DEBUG   tls.handshake   matched certificate in cache    {"remote_ip": "::1", "remote_port": "59654", "subjects": ["localhost"], "managed": true, "expiration": "2026/02/27 17:15:07.000", "hash": "08c4c9f922d6b2bb454735132566ef48af64a89276c51a70ea302f97abf0d68e"}
2026/02/27 05:18:16.630 DEBUG   http.handlers.cache     Incomming request &{Method:GET URL:/words.txt Proto:HTTP/2.0 ProtoMajor:2 ProtoMinor:0 Header:map[Accept:[*/*] User-Agent:[curl/8.15.0]] Body:0xc000598528 GetBody:<nil> ContentLength:0 TransferEncoding:[] Close:false Host:localhost Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr:[::1]:59654 RequestURI:/words.txt TLS:0xc0001a0480 Cancel:<nil> Response:<nil> Pattern: ctx:0xc000a01500 pat:<nil> matches:[] otherValues:map[]}
2026/02/27 05:18:16.630 DEBUG   http.handlers.cache     Request cache-control &{MaxAge:-1 MaxStale:-1 MaxStaleSet:false MinFresh:-1 NoCache:false NoStore:false NoTransform:false OnlyIfCached:false StaleIfError:0 Extensions:[]}
2026/02/27 05:18:16.646 DEBUG   storages.cache.otter    The stored key GET-https-localhost-/words.txt{-VARY-}Accept-Encoding: matched the current iteration key ETag &{Matched:true IfNoneMatchPresent:false IfMatchPresent:false IfModifiedSincePresent:false IfUnmodifiedSincePresent:false IfUnmotModifiedSincePresent:false NeedRevalidation:false NotModified:false IfModifiedSince:0001-01-01 00:00:00 +0000 UTC IfUnmodifiedSince:0001-01-01 00:00:00 +0000 UTC IfNoneMatch:[] IfMatch:[] RequestETags:[] ResponseETag:"dfkvzzahjwba2y66t"}
2026/02/27 05:18:16.646 DEBUG   http.handlers.cache     Found at least one valid response in the OTTER storage
2026/02/27 05:18:16.646 INFO    http.log.access.log0    handled request {"request": {"remote_ip": "::1", "remote_port": "59654", "client_ip": "::1", "proto": "HTTP/2.0", "method": "GET", "host": "localhost", "uri": "/words.txt", "headers": {"User-Agent": ["curl/8.15.0"], "Accept": ["*/*"]}, "tls": {"resumed": false, "version": 772, "cipher_suite": 4865, "proto": "h2", "server_name": "localhost", "ech": false}}, "bytes_read": 0, "user_id": "", "duration": 0.015856383, "size": 3800, "status": 200, "resp_headers": {"Age": ["4"], "Content-Length": ["3800"], "Server": ["Caddy"], "Etag": ["\"dfkvzzahjwba2y66t\""], "Last-Modified": ["Sat, 10 Jan 2026 11:53:19 GMT"], "Accept-Ranges": ["bytes"], "Alt-Svc": ["h3=\":443\"; ma=2592000"], "Vary": ["Accept-Encoding"], "Cache-Status": ["Souin; hit; ttl=116; key=GET-https-localhost-/words.txt; detail=OTTER"], "Cache-Control": [""], "Date": ["Fri, 27 Feb 2026 05:18:13 GMT"]}}
^C2026/02/27 05:18:18.824       INFO    shutting down   {"signal": "SIGINT"}
2026/02/27 05:18:18.824 WARN    exiting; byeee!! 👋     {"signal": "SIGINT"}
2026/02/27 05:18:18.824 DEBUG   events  event   {"name": "stopping", "id": "bce6a0d0-9480-4c15-995a-9eca94999473", "origin": "", "data": null}
2026/02/27 05:18:18.824 INFO    http    servers shutting down with eternal grace period
2026/02/27 05:18:18.824 DEBUG   http.handlers.cache     Cleanup...
2026/02/27 05:18:18.824 INFO    admin   stopped previous server {"address": "localhost:2019"}
2026/02/27 05:18:18.824 INFO    shutdown complete       {"signal": "SIGINT", "exit_code": 0}
Client Transcript
$ curl --insecure --output - 'https://localhost/words.txt' -v | tail -10
* Host localhost:443 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying [::1]:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1568 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [19 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [925 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject:
*  start date: Feb 27 05:15:06 2026 GMT
*  expire date: Feb 27 17:15:06 2026 GMT
*  issuer: CN=Caddy Local Authority - ECC Intermediate
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA256
*   Certificate level 1: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA256
* Connected to localhost (::1) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://localhost/words.txt
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: localhost]
* [HTTP/2] [1] [:path: /words.txt]
* [HTTP/2] [1] [user-agent: curl/8.15.0]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET /words.txt HTTP/2
> Host: localhost
> User-Agent: curl/8.15.0
> Accept: */*
>
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200
< accept-ranges: bytes
< alt-svc: h3=":443"; ma=2592000
< cache-control:
< cache-status: Souin; fwd=uri-miss; stored; key=GET-https-localhost-/words.txt
< etag: "dfkvzzahjwba2y66t"
< last-modified: Sat, 10 Jan 2026 11:53:19 GMT
< server: Caddy
< vary: Accept-Encoding
< content-length: 4953557
< date: Fri, 27 Feb 2026 05:18:13 GMT
<
{ [5 bytes data]
100 4837k  100 4837k    0     0  64.3M      0 --:--:-- --:--:-- --:--:-- 64.7M
* Connection #0 to host localhost left intact
Zythia
zythum
Zyzomys
Zyzzogeton
zyzzyva
zyzzyvas
ZZ
Zz
zZt
ZZZ

$ curl --insecure --output - 'https://localhost/words.txt' -v | tail -10
* Host localhost:443 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying [::1]:443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [1568 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [1210 bytes data]
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [19 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [925 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject:
*  start date: Feb 27 05:15:06 2026 GMT
*  expire date: Feb 27 17:15:06 2026 GMT
*  issuer: CN=Caddy Local Authority - ECC Intermediate
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA256
*   Certificate level 1: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA256
* Connected to localhost (::1) port 443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://localhost/words.txt
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: localhost]
* [HTTP/2] [1] [:path: /words.txt]
* [HTTP/2] [1] [user-agent: curl/8.15.0]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET /words.txt HTTP/2
> Host: localhost
> User-Agent: curl/8.15.0
> Accept: */*
>
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [122 bytes data]
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200
< accept-ranges: bytes
< age: 4
< alt-svc: h3=":443"; ma=2592000
< cache-control:
< cache-status: Souin; hit; ttl=116; key=GET-https-localhost-/words.txt; detail=OTTER
< date: Fri, 27 Feb 2026 05:18:13 GMT
< etag: "dfkvzzahjwba2y66t"
< last-modified: Sat, 10 Jan 2026 11:53:19 GMT
< server: Caddy
< vary: Accept-Encoding
< content-type: text/plain; charset=utf-8
< content-length: 3800
<
{ [5 bytes data]
100  3800  100  3800    0     0   168k      0 --:--:-- --:--:-- --:--:--  176k
* Connection #0 to host localhost left intact
abear
abearance
Abebi
abecedaire
abecedaria
abecedarian
abecedarians
abecedaries
abecedarium
abe

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

cache data got truncated

2 participants