Backend
posts (23)
- The Layers of HTTP in the Browser: From fetch() to QUIC4/9
The Browser Does Not Give JavaScript Full Control over HTTP
fetch() is not a raw socket. Cookies, the cache, preflight and some headers belong to the browser, so one operation in code does not equal one request on the…
- The Layers of HTTP in the Browser: From fetch() to QUIC3/9
Headers and Body: Metadata vs Representation
A body is bytes, not JSON. Headers say how to read it and steer caching, cookies and CORS, even though the application does not fully control them.
- The Layers of HTTP in the Browser: From fetch() to QUIC2/9
Methods and Status Codes: Semantics, Not Decoration
The method and the status tell the browser and the infrastructure what may be done with a request. That is why retrying a POST is a different decision than…
- The Layers of HTTP in the Browser: From fetch() to QUIC1/9
Request and Response: What Does the Browser Actually Send?
A request is not a URL, and an HTTP response is not always JSON. Headers and body have separate lifecycles, and an HTTP error is not a network failure.
- series · 9 parts
The Layers of HTTP in the Browser: From fetch() to QUIC
Two lines of fetch() cover several layers: the browser API, HTTP semantics, the wire protocol and the transport. This series separates them so the Network…
- Testing Through Layers: From Code to Infrastructure4/9
Contract Tests and API Tests: The Public System Agreement
A contract test protects the agreement between systems, while an API test checks the behavior of a public interface. Both matter where a change stops being…
- Realtime in the Browser: From Polling to WebTransport7/7
Polling, Streaming, SSE, WebSocket, or WebTransport?
The choice follows from the traffic model: freshness, direction, frequency, ordering and reliability. The simplest correct mechanism usually wins.
- Realtime in the Browser: From Polling to WebTransport6/7
WebTransport: Streams and Datagrams for Realtime over HTTP/3
HTTP/3 and QUIC give a single session many independent streams plus datagrams. Not all data has to arrive reliably and in order.
- Testing Through Layers: From Code to Infrastructure3/9
Integration Tests: The Real System Boundary
An integration test checks whether code works with a real dependency or a real boundary. It tests the place a unit test cannot see by definition.
- Realtime in the Browser: From Polling to WebTransport5/7
WebSockets: A Persistent Bidirectional Communication Channel
After the handshake there are no requests and responses left, only frames. A persistent connection is state, and it reaches the load balancer, the deploy and…