# WebSocket

Использует стандартный WebSocket для передачи данных.

Подключение WebSocket может быть проксировано другими HTTP-серверами (например, Nginx) и VLESS fallbacks path.

::: danger
**Рекомендуется переключиться на [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947), чтобы избежать значительных характеристик трафика, таких как WebSocket «ALPN is http/1.1».**
:::

::: tip
WebSocket распознает заголовок X-Forwarded-For в HTTP-запросе для перезаписи исходного адреса трафика, приоритет выше, чем у PROXY protocol.
:::

## WebSocketObject

`WebSocketObject` соответствует элементу `wsSettings` в конфигурации транспорта.

```json
{
  "acceptProxyProtocol": false,
  "path": "/",
  "host": "xray.com",
  "headers": {
    "key": "value"
  },
  "heartbeatPeriod": 10
}
```

> `acceptProxyProtocol`: true | false

Только для входящих подключений, указывает, следует ли принимать PROXY protocol.

[PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt) используется для передачи реального исходного IP-адреса и порта запроса, **если вы не знаете, что это такое, проигнорируйте этот параметр**.

Распространенные программы-обработчики обратного прокси (например, HAProxy, Nginx) можно настроить на его отправку, VLESS fallbacks xver также может его отправлять.

Если установлено значение `true`, то после установления TCP-соединения на самом нижнем уровне запрашивающая сторона должна сначала отправить PROXY protocol v1 или v2, иначе соединение будет закрыто.

> `path`: string

Путь, используемый WebSocket в HTTP-протоколе, значение по умолчанию — `"/"`.

Если в пути клиента есть параметр `ed` (например, `/mypath?ed=2560`), будет активирован `Early Data` для уменьшения задержки.

> `host`: string

Хост, отправляемый в HTTP-запросе WebSocket, значение по умолчанию — пустое. Если значение на стороне сервера пустое, значение хоста, отправленное клиентом, не проверяется.

Если это значение указано на стороне сервера или `host` указан в `headers`, то проверяется соответствие хоста запроса клиента.

Приоритет выбора хоста для отправки клиентом: `host` > `headers` > `address`.

> `headers`: map \{string: string\}

Пользовательские HTTP-заголовки, пары ключ-значение, где каждый ключ представляет имя HTTP-заголовка, а соответствующее значение является строкой.

Значение по умолчанию: пустое.

> `heartbeatPeriod`: int

Задает интервал времени для отправки Ping-сообщений с целью поддержания соединения. Если не указано или указано значение 0, Ping-сообщения не отправляются (по умолчанию используется текущее поведение).

## Browser Dialer

Использует браузер для обработки TLS, подробнее см. в [Browser Dialer](../features/browser_dialer.md).
