wireflow

Protocol playground

HTTP step simulation

How does REST move data?

Stateless HTTP resources. Follow each invisible step between the client and the server.

Paused
REST flow· step 1 of 7
Short-lived request; TCP/TLS often reused

Client

Browser / app

Link status

Resolving

Client → DNS

Hostname lookup before a socket exists

Server

API / service

DNS
on the wire

DNS lookup

Resolve api.example.com to an IP before opening a socket.

Situation

The browser resolves the API hostname before dialing.

Payload on the wire

A? api.example.com → 203.0.113.42

HOW IT WORKS

A resource-oriented style of using HTTP where each request carries enough context to stand alone and receives one discrete response.

Public and CRUD APIs stay cacheable, debuggable, and interoperable across every language, CDN, and browser. Clients address resources with URLs and verbs (GET/POST/PUT/PATCH/DELETE). Status codes, Cache-Control, and ETag drive caching and retries. HTTP/1.1 keep-alive or HTTP/2 usually reuses the TCP/TLS session across many short-lived exchanges.

REAL-WORLD EXAMPLE

GET /users → 200 OK + JSON

A dashboard loads the signed-in org’s user list over HTTPS with a bearer token. Client → Server → Client · Short-lived request; TCP/TLS often reused

GET /users HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJ...
Accept: application/json
If-None-Match: "u-42"

HTTP/1.1 200 OK
Content-Type: application/json
ETag: "u-43"
Cache-Control: private, max-age=30

{"users":[{"id":7,"name":"Ada"}]}

GOOD AT

Where it shines

  • Universal tooling: curl, OpenAPI, CDNs, and HTTP caches
  • Stateless requests retry and horizontally scale cleanly
  • Idempotent GETs and conditional requests (ETag/If-None-Match) cut load
  • First-class browser, proxy, and observability support

TRADE-OFFS

What to watch

  • One request maps to one response — no native server push
  • Chatty UIs need many round trips, aggregation, or polling
  • JSON + headers can be verbose for tiny payloads
  • Over-fetching is common without careful resource design

LIMITS

Hard ceilings & failure modes

  • No multiplexed app messages without HTTP/2 or multiple connections
  • Cache semantics break if Authorization/Cookie vary incorrectly
  • Large payloads block until the full response arrives

BROWSER SUPPORT

fetch / XMLHttpRequest — universal

Use fetch or XHR with JSON bodies. Conditional GETs via If-None-Match/If-Modified-Since; CORS and credentialed requests must be configured explicitly.

INFRASTRUCTURE

CDN edge cache, reverse proxies, TLS termination

Terminate TLS at the edge, cache safe GETs with Cache-Control/ETag, and put rate limits + WAF in front. Prefer HTTP/2 or HTTP/3 to the origin for connection reuse.

Reference

Protocol comparison

Click a column to sort · click a row to switch · right-click traits via Compare

GraphQLRequest-basedMediumNoOptionalNoData graphs
gRPCHTTP/2 muxVery lowChannelYesYesMicroservices
HTTP streamOpen bodyLow TTFBWhile activeYesNoAI chat
Long pollHeldLowPer requestSort ofNoOlder chat
MQTTBroker sessionLowYesPub/subOptionalIoT / telemetry
PollingRepeatedHighNoNoNoLegacy dashboards
RESTReuse / short reqMediumNoNoNoCRUD APIs
SSEPersistentLowYesYesNoNotifications
WebRTCP2P / TURNVery lowYesYesYesLive media
WebSocketPersistentVery lowYesYesOptionalChat / games