# RAW

Режим транспорта RAW — один из рекомендуемых в настоящее время режимов транспорта.

Может использоваться в различных комбинациях с различными протоколами.

## RawObject

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

```json
{
  "acceptProxyProtocol": false,
  "header": {
    "type": "none"
  }
}
```

> `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, иначе соединение будет закрыто.

Значение по умолчанию: `false`.

> `header`: [NoneHeaderObject](#noneheaderobject) | [HttpHeaderobject](#httpheaderobject)

Настройки маскировки заголовка пакета данных, значение по умолчанию: `NoneHeaderObject`.

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

### NoneHeaderObject

Маскировка не выполняется.

```json
{
  "type": "none"
}
```

> `type`: "none"

Указывает, что маскировка не выполняется.

### HttpHeaderObject

Конфигурация HTTP-маскировки должна быть одинаковой как на входящем, так и на исходящем соединении, и ее содержимое должно совпадать.

```json
{
  "type": "http",
  "request": {},
  "response": {}
}
```

> `type`: "http"

Указывает на выполнение HTTP-маскировки.

> `request`: [HTTPRequestObject](#httprequestobject)

HTTP-запрос.

> `response`: [HTTPResponseObject](#httpresponseobject)

HTTP-ответ.

#### HTTPRequestObject

```json
{
  "version": "1.1",
  "method": "GET",
  "path": ["/"],
  "headers": {
    "Host": ["www.baidu.com", "www.bing.com"],
    "User-Agent": [
      "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
      "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46"
    ],
    "Accept-Encoding": ["gzip, deflate"],
    "Connection": ["keep-alive"],
    "Pragma": "no-cache"
  }
}
```

> `version`: string

Версия HTTP, значение по умолчанию — `"1.1"`.

> `method`: string

Метод HTTP, значение по умолчанию — `"GET"`.

> `path`: \[ string \]

Путь, массив строк. Значение по умолчанию — `["/"]`. Если имеется несколько значений, то при каждом запросе случайным образом выбирается одно из них.

> `headers`: map{ string, \[ string \]}

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

Каждый запрос будет содержать все ключи и случайно выбранное соответствующее значение. Значение по умолчанию см. в примере выше.

#### HTTPResponseObject

```json
{
  "version": "1.1",
  "status": "200",
  "reason": "OK",
  "headers": {
    "Content-Type": ["application/octet-stream", "video/mpeg"],
    "Transfer-Encoding": ["chunked"],
    "Connection": ["keep-alive"],
    "Pragma": "no-cache"
  }
}
```

> `version`: string

Версия HTTP, значение по умолчанию — `"1.1"`.

> `status`: string

Состояние HTTP, значение по умолчанию — `"200"`.

> `reason`: string

Описание состояния HTTP, значение по умолчанию — `"OK"`.

> `headers`: map {string, \[ string \]}

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

Каждый запрос будет содержать все ключи и случайно выбранное соответствующее значение. Значение по умолчанию см. в примере выше.