Open the network panel before you load the chat page, then find the request that carries the messages rather than the one that renders the shell. The document, the scripts, the sign-in exchange and the chat transport can all go to different hosts. Most reports that the VPN broke chat really describe one of those four requests failing. Watch them in order and the answer is usually visible in the first two minutes.

Find the request that carries messages

Filter by type once the page settles: a WebSocket appears as its own entry, an event stream stays open with a growing response, and a long poll repeats at a regular interval. Record the scheme, host, port and status for whichever one carries the updates. Note whether it started before or after sign-in, because a transport opened before authentication is usually a different design from one opened after it. Read the request headers for the upgrade request or the accepted content type, since they identify the transport the deployed page actually chose.

Old forum posts describe transports that products stopped using years ago, so trust what the browser recorded rather than the article. If the entry is missing entirely, the client code may never have attempted a connection, which points at an earlier script or configuration failure. A page that loads proves only that the document arrived, and that distinction decides whether you are debugging the network at all.

Setup, delivery and lifetime fail differently

A WebSocket opens with an HTTP upgrade answered by a 101 status, and everything afterwards is framed messages rather than page fetching, two stages that RFC 6455 keeps explicitly separate. An event stream answers with a streaming content type and holds the response body open. Both can fail to open, open and deliver nothing, or open, deliver and then die quietly.

wscat -c wss://chat.example.com/socket -H "Origin: https://chat.example.com"
curl -N -H "Accept: text/event-stream" https://chat.example.com/events

Capture the first meaningful failure before you touch a profile, because the three timings point at different layers. If the handshake never completes, compare it with a plain HTTPS request to the same host to see whether anything reaches it at all. If it completes and no messages arrive, watch the frames or the stream body while somebody sends a test message from another account. If it works and then stops, note the exact time and the close code, because that pair identifies which end gave up.

Code 1006 means the socket closed without a close frame, which is what a middlebox or an idle timeout looks like from inside the browser. A VPN heartbeat does not prove that the inner application session is still alive.

The live host is a separate destination

Chat backends frequently live on their own hostname, sometimes on a different port or behind a separate certificate. That destination needs its own resolution, route and proxy treatment, and split tunnelling can include the page while excluding the socket. Resolve the live hostname from the client machine and confirm it answers with the address you expect on that network. Check the certificate chain for that hostname specifically, since a wildcard that covers the site does not always cover the socket endpoint.

If a proxy sits in the path, confirm that it permits the upgrade or the long-lived response instead of buffering it. Corporate proxies that rewrite HTML often handle WebSocket upgrades badly, which produces a page that renders while the chat never connects. Two requests to the same product are therefore not two requests to the same host.

Fix the destination list, not the security checks

Fixing a destination list is a routing change and belongs to whoever owns the route. Relaxing certificate validation or stripping the Origin header is a security change and belongs to whoever owns the policy, which is rarely the person debugging the ticket. The fastest way to make a connection appear is usually the fastest way to make an incident possible.

Ask the application owner which origins the backend accepts before changing anything, and pass that answer to whoever controls the proxy. If a certificate error appears only through the tunnel, inspect the intercepting device rather than installing a bypass.

Record enough to hand over

The useful artifact is short: page URL, live endpoint, handshake result, first failure time, and whether a reconnect was attempted. Add the VPN profile name and the network you were on, and anyone reading it can reproduce the test without asking six questions. Redact cookies, authorization headers and message bodies, and prefer a screenshot of the timing column over a full archive export. Frames and network archives can contain private messages and session tokens, so inspect before attaching anything.

If the failure is a silent close, include the close code and the idle interval that preceded it, because that pair usually identifies the timeout owner. Hand the record to the application or gateway owner instead of guessing a timeout value yourself. Their answer about supported keepalive behaviour is the one that ends the ticket.

អត្ថបទពាក់ព័ន្ធ