Localhost proxy - manual test

Load this page through isolation, and run the companion endpoint server (localhost_proxy_test_server.py --help) on the machine running the thin client.

1. Loopback hostname (pre-existing behaviour)

2. Vanity hostname (needs localhost_vanity_hosts)

The host must resolve to loopback on this machine (hosts file) and be listed in the tenant's localhost_vanity_hosts internal config. The port must be in the tenant's local-communication policy.

Results

A successful response echoes the Host header and TLS SNI the endpoint server saw - both should be the hostname you asked for, never 127.0.0.1.

(nothing yet)

Reading a failure

What you seeWhere it stopped
Network error (TypeError: Failed to fetch) Never tunnelled. The surrogate did not intercept it (host not in its vanity list - it needs a fresh pairing after a config change), or its port check denied it.
403, empty body Tunnelled, then the thin client refused the host: it is missing from the allowlist the thin client was served with. Reload the page after setting the internal config. To see what it got, check window.LOCALHOST_VANITY_HOSTS in devtools on the thin client's top-level document - this page runs in the isolated context and cannot read it.
504 after ~30s, empty body The per-port frame never became ready, usually because tc-server refused to render it. Look for event=tc-localhost-policy-violation in the tc-server log.
503, empty body The frame ran but its own connection to the endpoint failed: certificate not trusted, CORS refused, nothing listening, or - for an http:// vanity host on an https page - blocked as mixed content. The browser devtools console on the thin client shows which.
200 with the endpoint's JSON Whole path works.