b2KIT

Server-Sent Events Tester

Connect to an SSE endpoint and display incoming events in real time with event type filtering.

Tested tool guide Tested browser tools Checked August 16, 2026

What Server-Sent Events Tester does, with a checked example

SSE servers push events over a single long-lived HTTP connection, and this tool puts that stream on screen: enter an endpoint URL, connect, and every incoming event is listed with its event type and payload, with a filter that shows only the type you care about. The catch is that it sees the stream the way a browser EventSource does. Events only fire when a blank line terminates them, an event with no event: field is type message, and the endpoint must allow the tool's origin. An endpoint that works in curl can still refuse this connection.

Worked example

A concrete input and expected output from the current implementation.

Input

Endpoint URL: https://example.com/events

Wire data the server then sends:

event: tick
data: {"price":100.25}

event: tick
data: {"price":100.50}

data: {"status":"ok"}

Expected output

Three events, one per blank-line-terminated block:
- tick / {"price":100.25}
- tick / {"price":100.50}
- message / {"status":"ok"}

The third is type message because its block has no event: field. With the type filter set to tick, the list shows only the two tick events.

Each blank line ends one event, so the three blocks produce exactly three events. The event: field names the type, and a block without one falls back to the default type message, which is why the third entry is labeled message; the filter then matches against that type string.

How the result is produced

1

The connection

The tool makes a plain HTTP GET to the URL you enter; the endpoint answers with Content-Type: text/event-stream and keeps the socket open, pushing lines as they occur. If the connection drops, the client reconnects automatically, honoring a server-supplied retry: field. Events tagged with id: let it resume by sending a Last-Event-ID header. Browser rules still apply: the endpoint needs CORS headers for the tool's origin.

2

Parsing and display

The stream is split into blocks of field: value lines by blank lines. data: lines accumulate into the event payload, joined with newlines when repeated. event: names the event type, and a block without one defaults to message. A blank line terminates the block and dispatches the event, which the tool lists as type plus payload. Colon-prefixed lines are comments, ignored but useful as keepalives.

Good uses

  • Debugging a stream you are building: confirm every event ends with a blank line, event: types match what clients filter on, and keepalive comments hold the connection open.
  • Auditing a third-party or production feed (trade ticks, job progress, LLM token output) to see exactly what a browser client receives, including reconnection behavior.
  • Demoing or teaching SSE: show how data, event, id, and retry fields map to delivered events, isolating one type in a busy stream with the filter.

Limits and checks

  • CORS and mixed content: the tool runs in your browser, so an endpoint that answers curl without Access-Control-Allow-Origin headers will refuse this connection, and an HTTPS page cannot reach a plain-HTTP endpoint.
  • Silence is ambiguous: blocks without a trailing blank line never dispatch events, and buffering proxies can hold chunks, so an empty list can mean a malformed stream, a buffering intermediary, or a dead endpoint.
  • The filter is type-only: it matches the event: field, never the payload, and events without event: are all type message. Filtered-out events are hidden, not absent, and anything the server sent before you connected never appears.

Common questions

Can I send custom headers or a POST body, such as an auth token?

No. Server-sent events are a plain GET with standard headers, and a browser-based client cannot attach Authorization or a body. If the endpoint demands a token, you need a cookie the browser already carries, a token in the URL, or a different transport such as WebSocket.

Nothing appears, but curl receives data. What is wrong?

Three usual causes, in the order to check them: the endpoint lacks CORS headers for the tool's origin; events are not blank-line terminated, so none ever dispatch; or an intermediary buffers the stream, so chunks arrive late here while curl, run locally, gets them instantly. Fix each at its source before suspecting the endpoint's data.

References and verification

The example and behavioral notes were checked against the browser implementation. Standards and primary references below define the relevant format, formula, or platform behavior.

Related Tools