A compact, non-exhaustive reference for the values that appear across the notes. Prefer the linked source for the authoritative rule; these tables are memory aids.
HTTP status and cache freshness
| Code | Meaning | Used for |
|---|---|---|
| 200 OK | The request succeeded; response content depends on the method (HEAD has none) | baseline for a healthy route |
| 301 Moved Permanently | The URI changed permanently | deciding between the old and new URI in logs |
| 308 Permanent Redirect | A permanent redirect preserves the request method, including GET and HEAD | the redirects note |
| 206 Partial Content | A range request was honored | the range-requests note |
| 304 / 412 | 304 permits conditional GET/HEAD reuse; 412 reports a failed precondition | the conditional-requests note |
| 404 | Not found | missing-route checks; a custom error page must keep the correct status |
| 500 / 502 / 503 | Unexpected server error / invalid upstream response / temporary unavailability | release smoke tests and restart loops |
| Directive or header | Effect |
|---|---|
Cache-Control: public, max-age=31536000, immutable | shared-cache storage and a long freshness lifetime for content-hashed assets; immutable applies while fresh |
Cache-Control: private, max-age=300 plus ETag | private-cache freshness for 300 seconds; ETag enables revalidation, while shared caches must not store it |
Cache-Control: no-store | instructs caches not to store this exchange; not a retroactive purge or a privacy guarantee |
ETag / If-None-Match leading to 304 | GET/HEAD revalidation uses weak comparison; 304 has no body and does not prove byte identity |
Last-Modified / If-Modified-Since | timestamp-based validation, usually weak; ignored when If-None-Match is also sent |
See also: cache headers, conditional requests, compression, method semantics.
Security headers at the public edge
| Header | A short version of the policy |
|---|---|
Content-Security-Policy | default-src 'self'; script-src 'none' blocks script execution under this policy in supporting browsers |
Strict-Transport-Security | max-age=31536000; includeSubDomains stores a one-year HTTPS policy for the host and its descendants after valid HTTPS receipt |
X-Content-Type-Options | nosniff rejects script/style loads with missing or unsuitable MIME types |
X-Frame-Options | DENY prevents framing |
Referrer-Policy | strict-origin-when-cross-origin limits referrers |
Set-Cookie | Secure; HttpOnly; SameSite=Lax explicitly restricts transport, script access, and cross-site sending; Domain and Path remain separate |
These are policy examples, not universal defaults or a current edge measurement. HSTS cannot protect an unknown host on its first HTTP visit without prior policy (such as preload). Prepare HTTPS on every covered descendant before enabling includeSubDomains; removing the header does not erase cached policy. Cookie attributes do not create a host/path boundary or replace CSRF defenses.
See also: security headers, HSTS rollout, cookie scope, content type.
DNS and TLS checks
| Record or check | What it answers |
|---|---|
A / AAAA | which address the name resolves to |
CNAME | which canonical name the alias follows |
CAA | which CAs the effective policy authorizes at issuance time; not a TLS trust check |
TTL | ordinary cache freshness; lower at least one old TTL before a change, since existing cached answers keep their old lifetime |
TTL is not a universal cutover deadline: stale-answer policies, application caches, and existing connections can outlast it. Keep both endpoints working through the observation window. The examples below are inspection recipes, not fresh measurements; use only authorized targets.
# where a name resolves, and for how long
dig +nocmd +noall +answer +ttl example.com A
# print the first (leaf) certificate's dates and issuer; not chain validation
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null | openssl x509 -noout -dates -issuer
The answer-only dig display hides DNS status and authority details; an empty display alone does not diagnose failure. In the OpenSSL pipeline, x509 reads the first certificate, so -showcerts does not make the final output a full chain. SNI selects the host but does not verify its name or trust. The pipeline discards s_client diagnostics and, without a pipeline-failure option, its final status can hide an earlier failure. Retain diagnostics and perform separate hostname/trust checks with an appropriate timeout; this inspection pipeline has no explicit network deadline.
See also: CAA records, DNS change window, certificate chain, expiry check.
Caddy and release smoke tests
| Step | Check |
|---|---|
| Build | one complete artifact directory per release |
| Manifest | every published byte named with a checksum |
| Publish | switch the served directory only after verification; keep the previous one |
| Edge | request a page, a file, and a missing path; compare status codes and content types |
| TLS | test the HTTP-to-HTTPS redirect and the certificate name on the public hostname |
The helpers are downloadable from resources and stored in the repository under static/downloads/. The bare names below assume the reviewed scripts are executable and on PATH; otherwise invoke a reviewed local copy with sh. Replace <file> with a real, quoted filename before use; the angle brackets are notation, not literal shell syntax.
# per file
sha256sum <file>
# plain-text checks from the operator kit
check-http-headers.sh https://www.xbcatm.com/
check-tls-expiry.sh www.xbcatm.com 30
The HTTP helper performs GET, follows redirects (possibly to other hosts), discards the body, and has a 20-second transfer limit. Check its printed status and final URL: HTTP 4xx/5xx alone do not make it fail. The TLS helper checks the leaf’s notAfter against the requested interval; it does not validate notBefore, hostname, chain trust, or revocation, and needs a separate job timeout. Neither helper compares published body bytes. These network examples have not been executed for this reference review.
See also: static root, release checklist, read the edge, atomic switch, release manifest, resources.
Sources
RFC 9110 — HTTP Semantics, status code definitions and ranges, checked 2026-08-24.
MDN: HTTP response status codes, complete status list, checked 2026-08-24.
RFC 9111: HTTP Caching, cache directives and validation rules, checked 2026-09-05.
MDN: Content Security Policy guide, CSP directive names and syntax, checked 2026-09-05.
MDN:
Strict-Transport-Security, HSTS directives and deployment cautions, checked 2026-09-05.RFC 8659 — DNS Certification Authority Authorization, CAA lookup and property semantics, checked 2026-09-05.
Caddy
file_serverdirective, file serving, root, and index defaults, checked 2026-09-05.OpenSSL
s_clientdocumentation, SNI and certificate inspection options, checked 2026-09-05.RFC 6797 — HTTP Strict Transport Security, learned policy, descendant scope, and first-visit limits, checked 2026-10-19.
HTTPWG cookie specification draft, separate Domain, Path, Secure, HttpOnly, and SameSite rules, checked 2026-10-19.
RFC 1034 — Domain Names and RFC 8767 — Serving Stale Data, TTL preparation and stale-answer limits, checked 2026-10-19.
OpenSSL
x509, single-certificate display and expiry-only-checkend, checked 2026-10-19.curl manual, GET, redirects, time limits, and HTTP error-status handling, checked 2026-10-19.
W3C Content Security Policy Level 3 and WHATWG Fetch source, script policy and destination-specific
nosniffchecks, checked 2026-10-19.RFC 8246 — Immutable Responses, freshness-limited
immutable, checked 2026-10-19.