Match your public tunnel to the protocol and endpoint behavior your real-time application actually requires
WebSockets and WebTransport both support interactive browser applications, but they offer different delivery models and require different public ingress paths. WebSocket semantics are reliable and ordered whether the connection is bootstrapped through HTTP/1.1, HTTP/2, or HTTP/3. WebTransport uses HTTP/3 over QUIC and can combine independent reliable streams with unreliable datagrams, but browser compatibility depends on much more than forwarding UDP to a local port. This guide explains the protocol differences, endpoint identity requirements, fallback design, security controls, verification process, and the separate Localtonet HTTP and UDP tunnel workflows.
๐ What's in this guide
WebTransport vs WebSockets: the quick decision
Choose WebSockets when you need a familiar, reliable, ordered, bidirectional messaging channel that can operate through established HTTP infrastructure. WebSockets remain a practical fit for chat, collaborative interfaces, notifications, control panels, job progress updates, application events, and many other workloads where every message matters.
Consider WebTransport when the application benefits materially from multiple independent reliable streams, unreliable datagrams, or a mixture of both. It is particularly relevant when stale information is less useful than fresh information, when unrelated data flows should not wait for one another, or when one session must support several delivery contracts. Candidate workloads include changing coordinates, interactive media metadata, game state, dense telemetry, remote visualization, and latency-sensitive state synchronization.
Do not choose between them solely from a diagram that labels WebSockets as TCP and WebTransport as UDP. A conventional RFC 6455 WebSocket established through HTTP/1.1 normally uses a dedicated TCP connection. Standardized extended CONNECT mechanisms also allow WebSockets to be bootstrapped over HTTP/2 under RFC 8441 and HTTP/3 under RFC 9220 when the client, server, and intermediaries support them. The WebSocket API still presents reliable and ordered message semantics in those deployments, even though the HTTP stack may select a different underlying transport.
WebTransport has a stricter deployment requirement. It uses HTTP/3 over QUIC, and QUIC runs over UDP. A Localtonet UDP tunnel can forward UDP packets to a local QUIC listener, but that forwarding does not by itself create a browser-compatible WebTransport endpoint. The local server must implement the expected WebTransport protocol, present an identity that the browser accepts for the public hostname, handle the requested URL and Origin correctly, and support the streams or datagrams used by the application.
A Localtonet HTTP tunnel is the appropriate starting point for an HTTP-served WebSocket application. A Localtonet UDP tunnel can provide end-to-end UDP forwarding to a local QUIC listener. Neither tunnel converts WebSocket messages into WebTransport traffic, and UDP reachability alone is not proof that a browser can establish a WebTransport session.
How WebSockets and WebTransport differ
WebSocket semantics are reliable and ordered
WebSocket is a framed, bidirectional application protocol. A browser and server can send messages in either direction after the connection has been established, without opening a new HTTP request for each update. Secure browser connections use the wss:// scheme and require an acceptable TLS configuration.
The familiar deployment described by RFC 6455 begins with an HTTP/1.1 Upgrade request. In that case, the resulting WebSocket runs over a TCP connection. TCP retransmits missing data and exposes bytes to the application in order. Later data on that connection must wait when an earlier part of the byte stream is missing, which creates transport-level head-of-line blocking.
It is no longer precise to say that every WebSocket always occupies a standalone HTTP/1.1 TCP connection. RFC 8441 defines extended CONNECT for bootstrapping WebSockets over HTTP/2, and RFC 9220 defines the corresponding approach for HTTP/3. HTTP/2 itself normally runs over TCP, while HTTP/3 runs over QUIC. Availability depends on the browser, server, HTTP implementation, and every intermediary involved in the path.
These alternatives change how the WebSocket is carried, but they do not change its application contract into a datagram API or a collection of WebTransport streams. The WebSocket layer still exposes ordered and reliable messages. Applications should not assume that a browser will select a specific HTTP version, nor should they infer the selected transport from the JavaScript WebSocket API alone.
Head-of-line behavior therefore needs to be described in context. An HTTP/1.1 WebSocket and a WebSocket carried by HTTP/2 ultimately rely on TCP ordering. A WebSocket carried on an HTTP/3 stream uses QUIC rather than TCP, so packet loss on that stream does not block unrelated QUIC streams. The individual WebSocket stream still retains reliable, ordered delivery. It does not gain WebTransport datagrams or application-controlled stream multiplexing merely because HTTP/3 is underneath it.
WebTransport combines streams and datagrams over QUIC
WebTransport is a browser-facing transport API associated with HTTP/3 and QUIC. QUIC runs over UDP but adds encrypted connection establishment, congestion control, loss recovery, and reliable streams. The application does not receive raw UDP packets through the WebTransport API.
A WebTransport session can provide bidirectional streams, unidirectional streams, and datagrams. Each reliable stream preserves byte order within that stream. Separate streams have independent delivery state, so missing data on one stream does not require unrelated streams to wait for that missing stream data.
WebTransport datagrams have a different contract. They do not receive transport-level retransmission, they may be lost, and the receiver must not depend on their arrival order. Datagram support is also subject to negotiated size and implementation limits. Applications should treat a datagram write as an attempt to send replaceable information, not as confirmation that the peer received or applied it.
A datagram payload commonly includes an entity identifier, sequence number, state version, or sampling timestamp. The receiver can then reject stale state after a newer update has already arrived. Periodic complete snapshots sent through a reliable stream can restore a baseline after datagram loss.
| Characteristic | WebSockets | WebTransport |
|---|---|---|
| Browser-facing model | Reliable, ordered, bidirectional messages | Reliable streams plus unreliable datagrams |
| Bootstrap path | HTTP/1.1 Upgrade or standardized extended CONNECT over HTTP/2 or HTTP/3 when supported | WebTransport session establishment over HTTP/3 |
| Underlying transport | Commonly TCP through HTTP/1.1 or HTTP/2; QUIC is possible when bootstrapped over HTTP/3 | QUIC over UDP |
| Ordering | WebSocket messages retain reliable and ordered semantics | Ordering applies within each reliable stream; datagrams have no arrival-order guarantee |
| Multiplexing exposed to the app | One WebSocket message channel per WebSocket connection | Multiple application-controlled unidirectional and bidirectional streams in one session |
| Loss behavior | Missing reliable data must be recovered before later data in the same ordered channel is delivered | Loss on one reliable stream does not block unrelated streams; datagrams are not retransmitted |
| Localtonet mapping | HTTP tunnel to the local HTTP and WebSocket service | Conditional UDP forwarding to an already configured local QUIC and WebTransport server |
Design around delivery requirements
Protocol selection should begin with application semantics, not with a general claim that one protocol is newer or faster. Classify each type of data according to whether it must arrive, whether order matters, whether old values remain useful, and whether delays in one workload should affect another.
Reliable and ordered events
Commands, authorization changes, durable document edits, billing events, and operations that modify server state generally require reliable delivery and an explicit application result. A WebSocket is often sufficient. WebTransport can carry the same traffic on a reliable stream, but transport reliability does not replace operation IDs, acknowledgements, idempotency, authorization, and error handling.
A transport can confirm that bytes reached the peer without proving that the application successfully processed the requested operation. Important actions should receive an application-level response that identifies the operation and its outcome.
Independent reliable workloads
Consider a browser session that transfers an asset, receives notifications, and sends latency-sensitive commands. If all data shares one ordered application channel, a large transfer can delay later work. Separate WebTransport streams can isolate these workloads so that recovery on the asset stream does not prevent a command stream from progressing.
This advantage depends on deliberate stream design. Putting all traffic into one WebTransport stream recreates an ordered bottleneck within that stream. Opening streams without limits can create a different resource problem. Group messages according to lifetime, priority, authorization context, and failure boundary, then enforce stream-count and queue limits.
Latest-state data
Player positions, pointer coordinates, camera orientation, transient telemetry, and preview state often become obsolete quickly. If state version 105 fully replaces version 104, retransmitting 104 may add delay without adding value. WebTransport datagrams let the application send this type of update without transport-level retransmission.
The receiver must tolerate gaps and reordering. It should not apply an older state after a newer state has already been accepted. Critical transitions, such as committing a transaction or changing an account permission, belong on a reliable stream with an application acknowledgement.
Hybrid session and fallback designs
A WebTransport session can use reliable streams for login completion, durable commands, acknowledgements, and full snapshots while using datagrams for replaceable movement or sensor updates. Separate streams can further isolate assets, notifications, and per-entity synchronization.
An application may also expose both WebTransport and WebSocket endpoints. The client can attempt WebTransport when its tested requirements are satisfied and fall back to a WebSocket path when session establishment fails. Both transports can share application-level operation IDs and authorization concepts, but each must respect its own delivery behavior.
Safety controls, account changes, durable commands, financial operations, and authoritative transitions need reliable delivery, explicit authorization, input validation, and application-level confirmation. A datagram is suitable only when the application remains correct after loss or reordering.
WebTransport endpoint and deployment prerequisites
A reachable UDP host and port are necessary for an end-to-end QUIC deployment, but they are not sufficient for browser WebTransport. Before choosing a UDP tunnel, document the complete endpoint behavior expected by the browser and server.
HTTP/3 discovery and direct connection behavior
The application must know how the browser will reach the HTTP/3 endpoint. HTTP/3 deployments can involve protocol discovery associated with an HTTPS origin, or a client can be directed to a specific WebTransport URL and authority supported by the chosen implementation. A UDP-only public port should not be assumed to behave like a conventional HTTPS origin that also answers through TCP.
Verify the exact discovery and direct-connection behavior supported by the browser and server combination. If the implementation expects an HTTPS origin to advertise HTTP/3 availability, make sure that path exists. If the implementation supports connecting directly to the authority in the WebTransport URL, confirm that the assigned public host and port are accepted in the browsers you support.
Public hostname, port, and path
The browser constructs the WebTransport session from an HTTPS URL. That URL identifies a public hostname, an effective or explicit port, and a path handled by the WebTransport server. When Localtonet assigns a public UDP host and port, the client must use the authority appropriate to that endpoint. The local server must be prepared to handle the resulting HTTP/3 request and application path.
Do not leave localhost, a private IP address, or the local QUIC port hardcoded in the production browser client. Also do not assume that a public UDP mapping preserves the same numeric port used locally. Use the assigned public host and port shown by the active tunnel.
Certificate and endpoint identity
QUIC includes TLS-based security, and the browser validates the server identity during connection establishment. In a forwarded UDP design, the local QUIC server remains the protocol endpoint and presents the certificate. The identity must be acceptable for the public hostname that appears in the browser's WebTransport URL.
The safest deployment assumption is that the server needs a certificate chain and hostname relationship accepted by the target browsers. Some WebTransport APIs and development environments support constrained certificate-hash mechanisms, but their rules and availability must be verified for the exact browser and server implementation. They should not be treated as a universal replacement for normal certificate validation.
A certificate valid only for a local hostname will not automatically become valid for the public UDP hostname because packets pass through a tunnel. Localtonet's UDP forwarding does not rewrite the certificate or terminate the WebTransport security session on behalf of the local server.
Origin handling
A browser WebTransport request carries web security context that the server implementation can use when deciding whether to accept a session. Configure an explicit origin allowlist for the web application that is expected to open the connection. Avoid accepting arbitrary origins merely to make an initial test pass.
Origin validation is not user authentication. After checking the allowed web origin, the application still needs to establish who the user is, which tenant or resource they may access, and which streams or operations they are permitted to create.
Browser acceptance depends on HTTP/3 negotiation, WebTransport support, the public URL authority, certificate validation, Origin policy, session authentication, and the exact capabilities of the local server. Validate every layer before relying on the endpoint.
Browser, network, and fallback compatibility
WebSocket deployment is mature across browsers and common HTTP infrastructure, but it is not automatic. The selected HTTP path must support the WebSocket bootstrap used by the client and server. Connection duration, idle handling, origin policy, authentication state, and application heartbeat behavior can still affect reliability.
WebTransport has more deployment dependencies. The browser must implement the required API behavior. The client network must permit QUIC traffic over UDP. The public endpoint must route that traffic to the intended local listener. The certificate must be accepted for the public authority, and the local server must complete the expected HTTP/3 and WebTransport negotiation.
Browser support changes over time and can differ by version, operating system, enterprise policy, and individual WebTransport feature. This article does not assume a universal support date. Test the exact browser versions in your supported client matrix before making WebTransport the only path to an essential feature.
Why an ordinary reverse proxy may not be enough
A reverse proxy that accepts HTTP/1.1 or HTTP/2 over TCP may have no UDP listener or QUIC implementation. It cannot forward an HTTP/3 connection as ordinary HTTP merely because both use an https:// URL. Some ingress products can terminate HTTP/3, but WebTransport support depends on their specific implementation and configuration.
End-to-end UDP forwarding takes a different approach. The relay forwards UDP traffic to the local endpoint, and the local endpoint processes QUIC, HTTP/3, WebTransport, TLS identity, origins, and application authentication. This can preserve the required packets, but it leaves protocol compatibility with the local server.
Design a deliberate fallback
A fallback should be part of the protocol architecture rather than an untested exception handler. The client can attempt the preferred WebTransport endpoint, wait for a bounded result, and establish a WebSocket when the first path is unavailable. The interface should disclose reduced capabilities if the fallback cannot reproduce every feature.
A WebSocket fallback might send periodic snapshots instead of high-frequency datagrams, reduce update frequency, combine messages into batches, or disable a nonessential preview. Critical operations should behave consistently across both transports.
Avoid submitting one command through both connections unless operation IDs and server-side deduplication make that behavior safe. During a transition, define which transport is authoritative and how pending work moves to the fallback.
Authentication and safe public exposure
A successful WebSocket or WebTransport handshake proves that a transport path was established. It does not prove that the caller is authorized. Both endpoints need application-level authentication, authorization, input validation, and resource controls.
Browser WebSocket authentication requires planning because the browser API does not offer the same arbitrary header controls as every non-browser client. Applications commonly use an authenticated browser session, a short-lived connection credential, or a separate authenticated negotiation request. Avoid putting long-lived secrets in URLs because URLs can appear in logs, history, monitoring systems, and error reports.
WebTransport also needs an explicit session authentication design. Encryption protects traffic in transit, but it does not decide which user may open a session, create a stream, send datagrams, or access a tenant's resources. Complete authentication before accepting expensive work, and associate every stream or operation with the authenticated session.
Validate origins and messages
Allow only expected browser origins. Do not use an unguessable URL as an authorization mechanism. Parse inbound messages defensively, enforce size limits, validate their schema, and check each requested action against the caller's permissions.
Datagram handlers deserve particular care because a peer can send repeated transient updates. Keep unauthenticated processing inexpensive, limit accepted rates and sizes, and reject data that references resources outside the session's authorization scope.
Bound persistent-session resources
Real-time connections consume memory, sockets, queues, and application state. Establish limits for concurrent sessions, WebTransport streams, datagram rates, message sizes, queue depth, and idle duration. Bound reconnect loops and outgoing buffers so a disconnected or slow client cannot create unlimited memory growth.
Protect Localtonet device tokens
A Localtonet authentication token identifies the client device that runs a tunnel. Treat it as a secret. Do not place it in source code, browser bundles, screenshots, issue reports, or public documentation. Select the relay server or region from the current dashboard instead of copying a server code from an old tutorial.
Remove debug endpoints, replace default credentials, enforce authentication, apply least privilege, and inspect what the service reveals before login. Start only the tunnel you need, and stop or delete it when public access is no longer required.
Verify the service locally before tunneling it
Tunneling cannot repair an application that is not listening, uses the wrong protocol, rejects the intended Origin, or presents an unacceptable certificate. Establish a local baseline before adding public ingress. This separates application failures from tunnel, browser, and network-path failures.
Local WebSocket acceptance checks
Start the application and confirm that its ordinary HTTP route responds on the expected local IP address and port. Connect through the application's real browser client or another compatible WebSocket client. Verify successful connection establishment, bidirectional messages, normal closure, abnormal closure handling, and reconnection.
Exercise the actual authentication path. Confirm that an unauthenticated connection is rejected and that an authenticated connection receives only authorized information. Leave the connection idle long enough to evaluate heartbeat and cleanup behavior.
Record the expected route and scheme. A health page on one path does not prove that the WebSocket endpoint exists on another path. The public test should reuse the same application path while replacing the local authority with the tunnel's public URL.
Local WebTransport acceptance checks
Confirm that the local endpoint is genuinely serving the selected WebTransport implementation over HTTP/3 and QUIC. A successful TCP connection to the same numeric port does not validate a UDP listener. A generic UDP echo response also does not validate WebTransport.
Use a compatible browser and client page to verify session readiness. Test the exact public-facing path, expected Origin policy, authentication exchange, server-created and client-created streams where applicable, datagram handling, session closure, and resource cleanup.
For reliable streams, test framing, concurrent streams, cancellation, and closure. For datagrams, verify that the application remains correct after loss and reordering. Confirm that stale updates are rejected and that a reliable snapshot can restore state when required.
Follow the certificate procedure documented by the selected WebTransport server and browser. Do not disable browser security checks as a substitute for an endpoint identity that will work through the public hostname.
| Check | WebSocket expectation | WebTransport expectation |
|---|---|---|
| Listener | HTTP application is reachable on the configured local IP and port | QUIC server is listening through UDP on the configured local IP and port |
| Protocol establishment | WebSocket opens through the intended application path | WebTransport readiness completes through HTTP/3 |
| Identity | TLS and hostname behavior are valid for the tested secure endpoint | The browser accepts the certificate and identity procedure used by the QUIC server |
| Data exchange | Messages work reliably in both directions | Required streams and datagrams behave according to their delivery contracts |
| Authorization | Unauthorized sessions and operations are rejected | Origin, session, stream, and operation policies are enforced |
| Recovery | Reconnect restores state without duplicating operations | Reconnect and fallback handle pending operations safely |
Configure a Localtonet HTTP tunnel for WebSockets
With Localtonet, the client application on the device establishes an outbound connection to our relay. You do not need inbound router port forwarding, firewall changes, VPN setup, or a public IP address for this standard tunnel workflow. The tunnel remains available only while the selected client is connected and the tunnel is running.
For a WebSocket application served through HTTP, create an HTTP tunnel that points to the local IP address and port that already passed the WebSocket checks. The HTTP tunnel supplies a public HTTPS URL. Creating the configuration does not start it automatically.
HTTP tunnel prerequisites
- The WebSocket application must work locally through its documented HTTP address and route.
- The Localtonet client must run on the service host or another device that can reach the local target.
- You need the device-specific authentication token for that client.
- You must select an available relay server from the current dashboard.
- The application must accept the intended public hostname and browser Origin where its framework requires that configuration.
Install and run the Localtonet client
Install the appropriate Localtonet application for the operating system on a device that can reach the WebSocket service. Confirm from that device that the application's local IP address and HTTP port are reachable.
Open the HTTP tunnel configuration
In the Localtonet dashboard, create an HTTP tunnel for the HTTP-served WebSocket application. HTTP and UDP tunnels are different configurations, so do not point an HTTP tunnel at a UDP-only QUIC listener.
Select the device token and relay server
Select the authentication token for the client device that will run the tunnel, then choose an available relay server or region from the current dashboard. Keep the token private and do not hardcode a server value from an old example.
Enter the local HTTP target
Set the local IP address and port to the HTTP endpoint that passed local verification. The target must be reachable from the Localtonet client device, which matters when the service runs on another machine or inside a container.
Start the HTTP tunnel
Save the configuration and press Start. Wait until the selected device and tunnel are connected, then use the assigned public HTTPS URL. Stop or delete the tunnel when access is no longer needed.
See the Localtonet HTTP tunnel documentation for the current dashboard workflow. Available server values and plan-dependent options should always be confirmed in the current account interface.
Public WebSocket acceptance checks
- Open the ordinary HTTP route through the assigned public HTTPS URL.
- Construct the WebSocket address from the public authority, correct application path, and secure
wss://scheme when the page is served through HTTPS. - Confirm that the WebSocket connection reaches the open state.
- Verify authenticated messaging in both directions.
- Confirm that disallowed origins and unauthenticated sessions are rejected.
- Test idle behavior, clean closure, abnormal interruption, and bounded reconnection.
- Verify that reconnecting does not duplicate subscriptions, commands, or durable operations.
If the public HTTP page works but the WebSocket does not, basic HTTP reachability has already been established. Focus on the WebSocket route, bootstrap request, Origin validation, authentication state, application hostname checks, and connection lifecycle.
Configure conditional UDP forwarding for WebTransport
Use a Localtonet UDP tunnel only when the local application already runs a working QUIC and WebTransport server over UDP. The tunnel forwards UDP to the configured local target. It does not create HTTP/3 behavior, provision a certificate for the public UDP authority, validate browser origins, or supply a WebTransport implementation.
UDP and WebTransport prerequisites
- The local server must implement the WebTransport mode and capabilities required by the application.
- The server must listen on a known local UDP IP address and port reachable from the Localtonet client device.
- The browser client must support the required WebTransport features in the exact tested environment.
- The public hostname and port must be usable in the client's WebTransport URL.
- The local QUIC server must present endpoint identity that the browser accepts for that public hostname.
- The server must handle the requested path, validate the expected Origin, and authenticate the session.
- The client network must permit QUIC and UDP traffic to the assigned public endpoint.
Install and run the Localtonet client
Run the Localtonet client on the QUIC server or on another device that can reach its local UDP listener. Verify the WebTransport service locally before introducing the tunnel.
Open the UDP tunnel configuration
Create a UDP tunnel for the QUIC endpoint. Do not select an HTTP tunnel for a server that accepts only QUIC over UDP.
Select the device token and relay server
Select the authentication token for the Localtonet client that can reach the UDP service, then choose an available relay server or region from the current dashboard.
Enter the local UDP target
Set the local IP address and port where the QUIC server is listening through UDP. A TCP listener using the same numeric port is a separate endpoint and does not satisfy this requirement.
Start the UDP tunnel
Save the configuration and press Start. Wait until the device and tunnel are connected, then record the assigned public host and port. Use those public values when constructing and validating the browser-facing endpoint.
Consult the Localtonet UDP tunnel documentation while configuring the current dashboard. Relay availability and account options can vary, so use values presented in your account rather than copying them from a tutorial.
Public WebTransport acceptance checks
- Confirm that the tunnel is running and targets the exact local UDP listener.
- Use the assigned public hostname and port rather than the local authority.
- Confirm that the browser accepts the certificate and endpoint identity for that public hostname.
- Verify the required HTTP/3 discovery or direct connection behavior for the selected browser and server.
- Confirm that the WebTransport request reaches the correct application path.
- Verify that the expected Origin is accepted and an unexpected Origin is rejected.
- Complete application authentication before allowing sensitive streams or datagrams.
- Test bidirectional streams, unidirectional streams, and datagrams separately when the application uses them.
- Verify correct behavior after datagram loss and reordering.
- Test session closure, resource cleanup, reconnect behavior, and the WebSocket fallback.
Generic UDP reachability is only an intermediate diagnostic. The public test succeeds only when the browser completes a WebTransport session and the application exchanges authorized data using its required primitives.
Use an HTTP tunnel for a WebSocket service that already works through HTTP locally. Use a UDP tunnel as conditional end-to-end forwarding for a QUIC service that already implements WebTransport. If the application offers both protocols, treat them as separate public ingress paths unless your own architecture explicitly combines them.
Troubleshooting real-time tunnel connections
The WebSocket works locally but not through the public URL
Confirm that the correct Localtonet device is connected and that the HTTP tunnel has been started. Verify the local target against the address and port that passed local testing. If an ordinary page responds through the public URL, inspect the WebSocket path, bootstrap request, Origin, cookies or connection credential, and application logs.
Check whether an HTTPS page is trying to open an insecure ws:// URL. Verify that the application is not constructing its public WebSocket address from a hardcoded localhost value. A working health route does not prove that the WebSocket route is correct.
The WebSocket disconnects while idle
Determine whether the closure comes from the application, browser, network, or another component in the HTTP path. Use protocol-appropriate heartbeat behavior if the application needs it, and remove abandoned sessions promptly.
Reconnection should use bounded delay with randomized timing. Restore subscriptions without replaying a durable command twice. Avoid immediate unlimited retry loops because they can amplify an outage.
UDP reaches the server but WebTransport readiness fails
Packet arrival proves only that part of the UDP path works. Inspect the QUIC server logs for TLS identity errors, HTTP/3 negotiation failures, unsupported WebTransport behavior, incorrect paths, rejected origins, and authentication failures.
Verify that the client uses the public hostname and port assigned to the active tunnel. Confirm that the certificate presented by the local QUIC server is acceptable for that hostname. Also verify the server's expected HTTP/3 discovery or direct connection procedure in the target browser.
No UDP packets reach the local QUIC listener
Confirm that the configuration is a UDP tunnel, not a TCP or HTTP tunnel. Check the target IP address and port from the Localtonet client device. Verify that the service is actually listening through UDP and that the host's local security policy permits the traffic.
If the local configuration is correct, test from another client network. A managed network may restrict UDP or QUIC even when ordinary HTTPS over TCP works.
WebTransport works on one browser or network but not another
Compare browser versions, operating systems, enterprise policies, certificate behavior, and network UDP handling. Do not infer universal compatibility from one successful development machine. Preserve a diagnostic that identifies which transport was selected and why fallback occurred.
Datagram-driven state jumps backward
Add sequence numbers or state versions and reject an older update after a newer version has been applied. Do not assume datagrams arrive in send order. Send periodic authoritative snapshots on a reliable stream if clients need a recoverable baseline.
One WebTransport stream still stalls
Reliable ordering applies within each stream. If unrelated work shares one stream, missing data can delay later bytes in that stream. Separate independent workloads into appropriately scoped streams and avoid placing a large transfer ahead of latency-sensitive commands in the same stream.
The tunnel exists but nothing is publicly reachable
Creating and starting a Localtonet tunnel are separate lifecycle actions. Confirm that the selected client is connected, the tunnel is running, and the local service is still active. Test the local target from the Localtonet client device, especially when the application is hosted on another machine, virtual machine, or container network.
Frequently asked questions
Do WebSockets always run over one TCP connection?
No. The common RFC 6455 deployment uses HTTP/1.1 Upgrade and a TCP connection. WebSockets can also be bootstrapped with extended CONNECT over HTTP/2 under RFC 8441 and HTTP/3 under RFC 9220 when the complete stack supports it. WebSocket application semantics remain reliable and ordered regardless of which supported bootstrap path is selected.
Is WebTransport always faster than WebSockets?
No. Results depend on workload, network conditions, protocol implementation, and architecture. WebTransport can isolate independent reliable streams and avoid retransmitting replaceable datagrams, but a simple reliable message flow may gain little while becoming more difficult to deploy. Measure the real application under representative latency, loss, browsers, and client networks.
Does a Localtonet UDP tunnel create a WebTransport endpoint?
No. A UDP tunnel forwards UDP traffic to the configured local target. The local application must implement QUIC, HTTP/3, WebTransport, certificate handling, Origin validation, session authentication, streams, and datagrams. Browser-compatible session establishment must be verified separately.
Which Localtonet tunnel should I use for WebSockets?
Use an HTTP tunnel pointed at the local IP address and port serving the HTTP and WebSocket application. Verify the route locally, start the tunnel, then test the assigned public HTTPS URL and corresponding secure WebSocket address.
Which Localtonet tunnel should I use for a local QUIC server?
Use a UDP tunnel pointed at the UDP IP address and port where the local QUIC server listens. This is transport forwarding, not confirmation that the server satisfies browser WebTransport requirements. Validate the public hostname, port, certificate, Origin, HTTP/3 behavior, and application session separately.
Can WebTransport datagrams be trusted to arrive in order?
No. WebTransport datagrams may be lost, have no arrival-order guarantee, and are not retransmitted by the transport. Include sequence or version information when order matters, reject stale updates, and use a reliable stream for critical or durable operations.
Can a UDP tunnel convert WebSocket messages into WebTransport datagrams?
No. WebSocket and WebTransport are different application protocols. A UDP tunnel does not perform message conversion. A purpose-built application gateway would need to define message mapping, reliability behavior, authentication, authorization, acknowledgements, and failure handling.
Should every WebTransport application include a WebSocket fallback?
Not always. A controlled environment may guarantee compatible clients, endpoint configuration, and UDP reachability. A public application serving varied browsers and managed networks has a stronger reason to provide fallback. Base the decision on the tested client matrix and availability requirements.
Does starting a tunnel make an unauthenticated service safe?
No. A tunnel creates public reachability to the configured service. The application still needs authentication, authorization, Origin controls where applicable, input validation, resource limits, and secure credential handling. Review the service before exposure and stop the tunnel when it is no longer needed.
Test your real-time application with Localtonet
Verify the application locally, choose an HTTP tunnel for your WebSocket service or conditional UDP forwarding for an already configured QUIC endpoint, and expose only the authenticated service you intend to test.
Get Started Free โ