From 2f70265fb0f9dcf6212b2a54ce4f7c21d03e5f1e Mon Sep 17 00:00:00 2001 From: Nikita Korotaev <104270279+iambabyninja@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:07:04 +0500 Subject: [PATCH] RU Add xhttp mode downloadSettings and extra (#1) (#607) * ru Add xhttp mode downloadSettings and extra --- docs/ru/config/transports/splithttp.md | 79 +++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 3 deletions(-) diff --git a/docs/ru/config/transports/splithttp.md b/docs/ru/config/transports/splithttp.md index d15cf35..ffb24d9 100644 --- a/docs/ru/config/transports/splithttp.md +++ b/docs/ru/config/transports/splithttp.md @@ -2,7 +2,7 @@ -Используется для загрузки с помощью HTTP-фрагментированной передачи, загрузка осуществляется с помощью нескольких HTTP POST-запросов. +Используется для загрузки с помощью HTTP-фрагментированной передачи, загрузка осуществляется с помощью нескольких HTTP POST-запросов (или потоковых запросов). Может использоваться через CDN, не поддерживающие WebSocket, но есть несколько требований: @@ -20,6 +20,7 @@ ```json { + "mode": "auto", "path": "/", "host": "xray.com", "headers": { @@ -35,10 +36,32 @@ "maxConnections": 0, "cMaxReuseTimes": 0, "cMaxLifetimeMs": 0 - } + }, + "downloadSettings": { + "address": "example.com", + "port": 443, + "network": "xhttp", + "security": "none", + "tlsSettings": {}, + "realitySettings": {}, + "xhttpSettings": { + "path": "/" // должен быть одинаковым + }, + "sockopt": { + "dialerProxy": "" // просто пример + } + }, + "extra": {} } ``` +> `mode`: string + +Режим, используемый для передачи данных по XHTTP. Значение по умолчанию — `"auto"`. В этом режиме клиент при работе с REALITY использует потоковую передачу, в противном случае применяется передача с разбивкой на пакеты. Сервер поддерживает оба режима одновременно. + +- `"packet-up"`: используется передача данных с разбивкой на пакеты. Каждое сообщение упаковывается в отдельный HTTP POST-запрос и собирается обратно на стороне сервера. Подходит для работы с любыми HTTP-проксирующими устройствами. +- `"stream-up"`: используется потоковая передача данных. Открывается долгоживущее HTTP-соединение для отправки пакетов, аналогично существующим методам H2 / H3 / gRPC. Этот способ быстрее, но имеет меньшую совместимость. + > `path`: string Путь HTTP-протокола, используемый XHTTP. Значение по умолчанию — `"/"`. @@ -130,6 +153,56 @@ Значение по умолчанию — 0 (неограниченно). Максимальное время "жизни" соединения. По истечении этого времени ядро больше не будет назначать потоки этому соединению, и оно будет разорвано после закрытия последнего внутреннего потока. +## downloadSettings +Используется для настройки разделения соединений при загрузке данных по XHTTP (опционально). Важно: разделенный трафик должен достигать одного и того же входа на стороне сервера. +Внутри `downloadSettings` находится вложенный объект [StreamSettingsObject](../transport.md#streamsettingsobject), который может включать такие опции, как TLS, REALITY, `sockopt` и другие. Помимо этого, есть два уникальных параметра: + +> `address`: address + +Адрес сервера для загрузки данных. Поддерживает доменные имена, IPv4 и IPv6. + +> `port`: number + +Порт сервера для загрузки данных. + +## extra + +```json +{ + "extra": { + "headers": { + "key": "value" + }, + "scMaxEachPostBytes": 1000000, + "scMaxConcurrentPosts": 100, + "scMinPostsIntervalMs": 30, + "noSSEHeader": false, + "xPaddingBytes": "100-1000", + "xmux": { + "maxConcurrency": 0, + "maxConnections": 0, + "cMaxReuseTimes": 0, + "cMaxLifetimeMs": 0 + }, + "downloadSettings": { + "address": "example.com", + "port": 443, + "network": "xhttp", + "security": "none", + "tlsSettings": {}, + "realitySettings": {}, + "xhttpSettings": { + "path": "/" // должно совпадать + } + } + } +} +``` +`extra` — это вложенный объект `XHttpObject`, используемый для предоставления исходного JSON в общий доступ. Настройки, указанные внутри `extra`, переопределяют соответствующие настройки, заданные снаружи. + +В настоящее время следующие параметры внутри `extra` **не работают**: +`host`, `path`, `mode`, `downloadSettings->sockopt`, `extra`. + ## Версия HTTP ### Поведение клиента @@ -177,4 +250,4 @@ * Не ожидайте, что CDN будет правильно передавать все заголовки. Цель этого протокола — обойти CDN, которые не поддерживают WS, а такие CDN обычно ведут себя не очень хорошо. -* Следует предполагать, что все HTTP-соединения не поддерживают потоковые запросы, поэтому размер каждого пакета, отправляемого по исходящему соединению, должен основываться на задержке, пропускной способности и ограничениях самого промежуточного узла (аналогично MTU и алгоритму Нейгла в TCP). \ No newline at end of file +* Следует предполагать, что все HTTP-соединения не поддерживают потоковые запросы, поэтому размер каждого пакета, отправляемого по исходящему соединению, должен основываться на задержке, пропускной способности и ограничениях самого промежуточного узла (аналогично MTU и алгоритму Нейгла в TCP).