v147 · Demo 4 · Security
WebTransport LNA Tester
Enter any https:// WebTransport URL to classify its IP space (loopback / private / public) and trace the full LNA handshake flow. Then attempt a real connection and watch Chrome 147's permission checks in action.
URL Classifier & Connection Tester
Try examples or enter a custom WebTransport URL. Classification is done locally — no network request needed.
Classify a URL to see the LNA handshake steps.
Attempt new WebTransport(url) and trace the result. Connection to local addresses requires LNA opt-in from the server.
If your WebTransport server lives on a private or loopback address and is accessed from a public page, it must respond to the LNA preflight with the following HTTP/3 headers:
// Required response headers on the WebTransport server:
Access-Control-Allow-Origin: https://your-public-site.example
Access-Control-Allow-Private-Network: true
Node.js server example (node-webtransport):
import { WebTransportServer } from '@fails-components/webtransport';
const server = new WebTransportServer({
port: 4433,
cert: fs.readFileSync('cert.pem'),
privKey: fs.readFileSync('key.pem'),
});
server.on('session', (session) => {
// Set LNA opt-in headers on the session response
session.responseHeaders.set(
'Access-Control-Allow-Private-Network', 'true'
);
session.responseHeaders.set(
'Access-Control-Allow-Origin',
'https://your-public-site.example'
);
session.accept();
session.on('stream', (stream) => {
// handle bidirectional streams
});
});
Note: The preflight for WebTransport uses QUIC (not HTTP/1.1 OPTIONS like CORS). The server must set these headers on its QUIC handshake response, not on a separate preflight endpoint.
references
implementation reference
Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗