W3cubDocs

/Web APIs

WebTransport

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

The WebTransport interface of the WebTransport API provides functionality to enable a user agent to connect to an HTTP/3 server, initiate reliable and unreliable transport in either or both directions, and close the connection once it is no longer needed.

Note: This feature is available in Web Workers

Constructor

WebTransport()

Creates a new WebTransport object instance.

Instance properties

closed Read only

Returns a promise that resolves when the transport is closed.

datagrams Read only

Returns a WebTransportDatagramDuplexStream instance that can be used to send and receive datagrams.

congestionControl Read only Experimental

Returns a string that indicates the application preference for either high throughput or low-latency when sending data.

incomingBidirectionalStreams Read only

Represents one or more bidirectional streams opened by the server. Returns a ReadableStream of WebTransportBidirectionalStream objects. Each one can be used to read data from the server and write data back to it.

incomingUnidirectionalStreams Read only

Represents one or more unidirectional streams opened by the server. Returns a ReadableStream of WebTransportReceiveStream objects. Each one can be used to read data from the server.

ready Read only

Returns a promise that resolves when the transport is ready to use.

reliability Read only Experimental

Returns a string that indicates whether the connection supports reliable transports only, or whether it also supports unreliable transports (such as UDP).

Instance methods

close()

Closes an ongoing WebTransport session.

createBidirectionalStream()

Asynchronously opens a bidirectional stream (WebTransportBidirectionalStream) that can be used to read from and write to the server.

createUnidirectionalStream()

Asynchronously opens a unidirectional stream (WritableStream) that can be used to write to the server.

getStats() Experimental

Asynchronously returns a Promise that fulfills with an object containing HTTP/3 connection statistics.

Examples

The example code below shows how you'd connect to an HTTP/3 server by passing its URL to the WebTransport() constructor. Note that the scheme needs to be HTTPS, and the port number needs to be explicitly specified. Once the WebTransport.ready promise fulfills, you can start using the connection.

js

async function initTransport(url) {
  // Initialize transport connection
  const transport = new WebTransport(url);

  // The connection can be used once ready fulfills
  await transport.ready;
  return transport;
}

You can respond to the connection closing by waiting for the WebTransport.closed promise to fulfill. Errors returned by WebTransport operations are of type WebTransportError, and contain additional data on top of the standard DOMException set.

The closeTransport() method below shows a possible implementation. Within a try...catch block it uses await to wait for the closed promise to fulfill or reject, and then reports whether or not the connection closed intentionally or due to error.

js

async function closeTransport(transport) {
  // Respond to connection closing
  try {
    await transport.closed;
    console.log(`The HTTP/3 connection to ${url} closed gracefully.`);
  } catch (error) {
    console.error(`The HTTP/3 connection to ${url} closed due to ${error}.`);
  }
}

We might call the asynchronous functions above in their own asynchronous function, as shown below.

js

// Use the transport
async function useTransport(url) {
  const transport = await initTransport(url);

  // Use the transport object to send and receive data
  // ...

  // When done, close the transport
  await closeTransport(transport);
}

const url = "https://example.com:4999/wt";
useTransport(url);

For other example code, see the individual property and method pages.

Specifications

Browser compatibility

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet
WebTransport 97 97 114 No 83 No 97 97 114 68 No 18.0
WebTransport 97 97 114 No 83 No 97 97 114 68 No 18.0
byob_readers 109 109 114 No 95 No 109 109 114 74 No 21.0
close 97 97 114 No 83 No 97 97 114 68 No 18.0
closed 97 97 114 No 83 No 97 97 114 68 No 18.0
congestionControl No No 114 No No No No No 114 No No No
createBidirectionalStream 97 97 114 No 83 No 97 97 114 68 No 18.0
createUnidirectionalStream 97 97
114Returns a WritableStream instead of a WebTransportSendStream.
No 83 No 97 97
114Returns a WritableStream instead of a WebTransportSendStream.
68 No 18.0
datagrams 97 97 114 No 83 No 97 97 114 68 No 18.0
getStats No No
114Method is defined but throws a not-implemented error.
No No No No No
114Method is defined but throws a not-implemented error.
No No No
incomingBidirectionalStreams 97 97 114 No 83 No 97 97 114 68 No 18.0
incomingUnidirectionalStreams 97 97 114 No 83 No 97 97 114 68 No 18.0
ready 97 97 114 No 83 No 97 97 114 68 No 18.0
reliability No No 114 No No No No No 114 No No No

See also

© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebTransport