mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2025-01-21 02:01:41 +03:00
149 lines
5.5 KiB
Markdown
149 lines
5.5 KiB
Markdown
|
# TCP
|
|||
|
|
|||
|
Режим транспорта TCP — один из рекомендуемых в настоящее время режимов транспорта.
|
|||
|
|
|||
|
Может использоваться в различных комбинациях с различными протоколами.
|
|||
|
|
|||
|
## TcpObject
|
|||
|
|
|||
|
`TcpObject` соответствует элементу `tcpSettings` в конфигурации транспорта.
|
|||
|
|
|||
|
```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-заголовка, а соответствующее значение является массивом.
|
|||
|
|
|||
|
Каждый запрос будет содержать все ключи и случайно выбранное соответствующее значение. Значение по умолчанию см. в примере выше.
|