WebTransport: конструктор WebTransport()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех самых популярных браузерах.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Конструктор WebTransport() создаёт новый экземпляр объекта WebTransport.
Синтаксис
new WebTransport(url) new WebTransport(url, options)
Параметры
url-
Строка, представляющая URL HTTP/3 сервера для подключения. Схема должна быть HTTPS, а номер порта необходимо указать явно.
optionsНеобязательно-
Объект, который может содержать следующие свойства:
allowPoolingНеобязательно-
Логическое значение. Если
true, соединение сети для этогоWebTransportможет быть разделено с пулом других сессий HTTP/3. По умолчанию значениеfalse, и соединение не может быть разделено. congestionControlНеобязательно-
Строка, указывающая предпочтение приложения, чтобы алгоритм управления заторами при отправке данных по этому соединению был настроен на пропускную способность или низкую задержку. Это подсказка для пользовательского агента. Допустимые значения:
default(по умолчанию),throughput, иlow-latency. requireUnreliableНеобязательно-
Логическое значение. Если
true, соединение не может быть установлено по протоколу HTTP/2, если соединение HTTP/3 невозможно. По умолчанию значениеfalse. serverCertificateHashesНеобязательно-
Массив объектов, каждый из которых определяет значение хэша сертификата сервера вместе с именем алгоритма, который использовался для его генерации. Этот параметр поддерживается только для транспортов, использующих отдельные подключения (
allowPoolingравноfalse).Если указано, браузер попытается аутентифицировать сертификат, предоставленный сервером, по предоставленным значениям хэша сертификата(ов), чтобы подключиться, вместо использования веб-инфраструктуры открытых ключей (PKI). Если совпадают какие-либо хэши, браузер знает, что сервер обладает надёжным сертификатом, и подключится как обычно. Если массив пуст, пользовательский агент использует те же процедуры проверки сертификатов PKI, которые он использовал бы для обычной операции fetch.
Эта функция позволяет разработчикам подключаться к серверам WebTransport, которые обычно сталкиваются с проблемами получения общедоступного сертификата, например, к хостам, которые не являются публично доступными, или к временным хостам, например, виртуальным машинам.
Примечание: Веб-приложение, как правило, получает хэши от надёжного посредника. Например, вы можете использовать облачный провайдер для предоставления виртуальных машин, на которых работают ваши серверы WebTransport. Провайдер имеет надёжный доступ к серверу и может запросить его сертификат, сгенерировать хэши и предоставить их приложению через API (который опосредуется через PKI) или консоль облачного сервиса. Теперь веб-приложение может напрямую подключиться к серверу, размещённому на виртуальной машине, используя предоставленные хэши, даже если сама виртуальная машина не имеет долгоживущего сертификата TLS.
Сертификат должен быть сертификатом X.509v3, срок действия которого менее 2 недель, а текущее время должно находиться в этом временном промежутке. Формат открытого ключа в сертификате зависит от реализации, но должен как минимум включать ECDSA с именной группой secp256r1 (NIST P-256) и не должен включать ключи RSA. Таким образом, ключ ECSDA является совместимым по умолчанию форматом открытого ключа. Пользовательский агент может добавить дополнительные требования; они будут перечислены в разделе совместимости браузера, если известно.
Каждый объект в массиве имеет следующие свойства:
algorithm-
Строка со значением:
sha-256(регистронезависимо). Обратите внимание, что эта строка представляет алгоритм для проверки хэша, и любой хэш с неизвестным алгоритмом будет проигнорирован. На момент написания спецификацииSHA-256является единственным алгоритмом хэширования, перечисленным в спецификации. value-
ArrayBufferилиTypedArray, содержащий значение хэша.
Исключения
-
NotSupportedErrorDOMException -
Выбрасывается, если
serverCertificateHashesуказано, но протокол транспорта не поддерживает эту функцию. SyntaxError-
Выбрасывается, если указанный
urlнекорректен, если схема не HTTPS или если URL содержит фрагмент. TypeError-
Выбрасывается, если
serverCertificateHashesустановлено для подключения, не использующего отдельные подключения (другими словами, еслиallowPoolingравноtrue).
Примеры
Подключение с параметрами по умолчанию
В этом примере показано, как создать WebTransport с использованием только URL, дождаться его подключения и отслеживать транспорт, сообщая о его закрытии.
Сначала мы определяем метод async, который принимает URL и использует его для создания объекта WebTransport. Параметры конструктора не указаны, поэтому подключение использует параметры по умолчанию: выделенное подключение, поддержка ненадежных переводов не требуется, управление заторами по умолчанию и обычная веб-аутентификация PKI сервера. Обратите внимание, что схема должна быть HTTPS, а номер порта необходимо указать явно.
После выполнения обещания WebTransport.ready вы можете начать использовать подключение.
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;
}
Вы можете ответить на закрытие подключения, дождавшись выполнения обещания WebTransport.closed. Ошибки, возвращаемые операциями WebTransport, имеют тип WebTransportError и содержат дополнительные данные помимо стандартного набора DOMException.
Метод closeTransport() ниже показывает, как это сделать. Внутри блока try...catch он использует await для ожидания выполнения или отклонения обещания closed и затем сообщает, было ли подключение закрыто преднамеренно или из-за ошибки.
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}.`);
}
}
Мы можем вызвать вышеуказанные асинхронные функции в собственной асинхронной функции, как показано ниже.
// 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);
Подключение с хэшами сертификатов сервера
В примере ниже показан код для создания WebTransport, который задаёт параметр serverCertificateHashes. В этом случае массив содержит два хэша, оба закодированы с использованием алгоритма SHA-256. Обратите внимание, что параметр allowPooling должен быть false (по умолчанию).
const transport = new WebTransport(url, {
serverCertificateHashes: [
{
algorithm: "sha-256",
value: "5a155927eba7996228455e4721e6fe5f739ae15db6915d765e5db302b4f8a274",
},
{
algorithm: "sha-256",
value: "7d7094e7a8d3097feff3b5ee84fa5cab58e4de78f38bcfdee5ea8b51f4bfa8fd",
},
],
});
Спецификации
| Спецификация |
|---|
| WebTransport # dom-webtransport-webtransport |
Совместимость браузеров
| Рабочий стол | Мобильное устройство | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
WebTransport |
97 | 97 | 114 | 83 | Нет | 97 | 114 | 68 | Нет | 18.0 | 97 |
options_allowPooling_parameter |
Нет | Нет | 114 | Нет | Нет | Нет | 114 | Нет | Нет | Нет | Нет |
options_congestionControl_parameter |
Нет | Нет | 114 | Нет | Нет | Нет | 114 | Нет | Нет | Нет | Нет |
options_requireUnreliable_parameter |
Нет | Нет | 114 | Нет | Нет | Нет | 114 | Нет | Нет | Нет | Нет |
options_serverCertificateHashes_parameter |
100 | 100 | 125 | 86 | Нет | 100 | 125 | 69 | Нет | 19.0 | 100 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebTransport/WebTransport