How to Inspect and Filter WebSocket Traffic in Safari Web Inspector

Real-time collaborative applications, trading platforms, chat clients, and interactive dashboards rely heavily on the WebSocket protocol (ws:// and wss://) to maintain bidirectional, low-latency communication channels between client browsers and backend servers. Unlike standard stateless HTTP requests, a single WebSocket connection persists over an extended duration, exchanging thousands of interleaved messages. Debugging connection lifecycles, framing errors, and message serialization requires specialized inspector tools. Apple’s Safari Web Inspector provides dedicated network instrumentation to dissect WebSocket traffic.

Understanding WebSocket Frame Inspection in Web Inspector

When a web application instantiates a WebSocket, communication begins with an HTTP/1.1 Upgrade handshake (returning HTTP status 101 Switching Protocols). Once established, data flows as individual frames across the persistent TCP socket. Safari Web Inspector captures and indexes every frame passing across the connection, categorising them into:

  • Directional Data Flow: Clearly distinguishes outgoing frames transmitted by the browser (client-to-server) from incoming frames received from the remote endpoint (server-to-client).
  • Payload Encoding: Native rendering of plain text, structured JSON strings, binary ArrayBuffers, and Blobs.
  • Opcode Telemetry: Automatic decoding of text frames, binary frames, ping/pong keep-alive heartbeats, and connection close frames.

Locating WebSocket Connections in the Network Panel

To inspect active WebSocket connections on any webpage using Safari on macOS:

  1. Open Safari and navigate to the target web application.
  2. Open Web Inspector by pressing Cmd + Option + I (or right-click and choose Inspect Element).
  3. Navigate to the Network tab in the primary toolbar.
  4. In the network resource filter bar located directly below the timeline overview, click the WebSockets filter pill (often designated with a bidirectional socket icon or labeled Sockets).
  5. Reload the page or trigger the real-time action in your application to capture the initial handshake.
  6. Select the active WebSocket connection entry from the resource list.

Analyzing Handshake Headers and Connection Parameters

Selecting the connection item opens the detail drawer on the right side of the screen:

  • Headers Tab: Verify that the initial HTTP request correctly sent Upgrade: websocket, Connection: Upgrade, and the cryptographic Sec-WebSocket-Key.
  • Response Validation: Confirm the server replied with HTTP/1.1 101 Switching Protocols and a valid Sec-WebSocket-Accept header.
  • Protocol Negotiation: Inspect the negotiated subprotocol (e.g. graphql-transport-ws, wamp.2.json, or custom protocol strings) under Sec-WebSocket-Protocol.

Monitoring Live Frames and Filtering Messages

Click on the Frames tab in the detail panel to open the real-time message stream:

  1. Chronological Stream: Frames appear in order of arrival, displaying the timestamp, frame length, opcode type, and a preview snippet.
  2. Direction Indicators: Green up-arrows designate client-transmitted payloads, while purple down-arrows designate incoming server broadcasts.
  3. Payload Formatting: Click any frame row to inspect the payload in the preview drawer. If the payload contains JSON, Safari formats the string into a syntax-highlighted, collapsible tree, allowing immediate inspection of nested keys.
  4. Filtering Messages: Use the search filter box above the frame list to filter messages by keyword, event name, or transaction ID without losing connection history.

Debugging Binary Payloads and Connection Drops

When handling high-frequency binary data (such as Protobuf, MessagePack, or compressed audio streams):

  • Hex and Text Viewers: Safari allows switching between raw ASCII representation, Hexadecimal dump views, and decoded array lengths for binary ArrayBuffer frames.
  • Diagnosing Abnormal Disconnections: When a connection closes unexpectedly, locate the final Close frame in the timeline. Click the row to inspect the numeric close code (e.g. 1000 for normal closure, 1006 for abnormal termination without close handshake, or 1008 for policy violation).

Leveraging Safari Web Inspector’s WebSocket debugging capabilities ensures frontend engineers can rapidly diagnose handshake errors, validate message serialization, and maintain resilient real-time web applications.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.