In an opaque-session model, the browser stores a cookie with an opaque identifier and storage lifetime. The identifier locates a server-side session record with user state and server expiry. Logout must both clear the cookie and invalidate the session.

Cookies and sessions hold boundaries

A cookie is a browser storage and transport mechanism. A server-side session is one application design that uses a cookie value to locate stored state. Keeping those responsibilities separate makes login, expiry, and logout testable. This article follows an opaque session identifier, rather than repeating the host, path, or SameSite matching rules. ...

January 12, 2027 · 5 min · XB Field Notes
An HTTP upgrade opens one WebSocket session between client and server. Message arrows run in both directions over that connection.

WebSockets are a session, not a page

The HTTP/1.1 upgrade shown in the cover is the opening flow discussed here; other HTTP versions use different bootstrapping. HTTP describes requests and responses; it does not require a new TCP connection for every request. WebSocket adds a message-oriented, bidirectional session. Choosing it over polling means accepting responsibility for that session’s identity, queues, liveness and recovery, in exchange for timely updates initiated by either endpoint. ...

January 8, 2027 · 12 min · XB Field Notes
The required dependency fails in one instance. /livez still returns 200 because its handler answers; /readyz returns 503. A large not-equal sign separates the two decisions.

A purpose-built health check is worth keeping

A health endpoint is a contract with a consumer that will take action. Returning 200 because a handler ran does not prove that an instance can serve useful traffic. Before writing the endpoint, identify the decision it supports: allow initialization, admit requests, or restart a process that cannot recover. Different questions need different evidence. ...

December 31, 2026 · 6 min · XB Field Notes
A curl probe splits into process exit, HTTP status, headers and body; the article fixture can have exit zero with HTTP 404 and the literal body text 'missing'.

curl is your first HTTP probe

A command-line HTTP request gives a small, inspectable view of a service. It can show the response status, headers, body, and timing without a browser’s rendering layer. Start with a concrete question: whether the original URL redirects correctly, whether the final representation is available, or whether a particular method is accepted. Those questions require different probes. One successful curl invocation does not establish that every part of a website works. ...

December 11, 2026 · 5 min · XB Field Notes
A current resource branches to a next page and an alternate resource. The arrows describe relations; they do not redirect or authorize a fetch.

The Link header relates adjacent resources

The Link response field describes relationships between the current resource and other resources. An API returning JSON can advertise its next page without making clients scrape HTML or invent a query parameter. The field supplies a target and a relation; whether to follow it remains a client decision. It is useful metadata, not a command that every browser or crawler must execute. ...

December 4, 2026 · 5 min · XB Field Notes
A status, body and application grid distinguishes complete 200 with ok:false, truncated 200, and no response.

Read status together with transport and application results

A caller needs more than a three-digit number to decide what happened. Did an HTTP response arrive, did its body arrive completely, and does the application result satisfy the requested operation? These are separate questions. A 200 response can carry a documented application-level failure, or its transfer can break after the headers. A connection failure before any response supplies no HTTP status at all. Preserve those distinctions in diagnostics and metrics. ...

December 3, 2026 · 6 min · XB Field Notes
Old red bytes keep their old digest filename while changed blue bytes use a new digest filename.

Immutable assets and fingerprints

A fingerprinted asset puts a digest of its bytes into its URL. Changing a stylesheet produces a different address, so a page can request the new representation without depending on every existing cache expiring simultaneously. The useful guarantee comes from the publishing process: once an address is released, its contents must remain consistent with that digest. ...

November 25, 2026 · 5 min · XB Field Notes
Two receipt estimates, 12 seconds and 7 seconds, merge by maximum into 12; adding 8 seconds of residence yields current age 20 seconds.

The Age header tells how long a cached copy has been around

Age is an estimate of elapsed seconds since an origin generated or successfully validated a response. It includes time in caches and in transit. It is not the object’s creation timestamp, a count of requests, or simply the time spent on the last proxy’s disk. Reading it correctly requires the response’s freshness policy and the request context. ...

November 6, 2026 · 5 min · XB Field Notes