Используется для загрузки с помощью 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`**не работают**:
* Не ожидайте, что CDN будет правильно передавать все заголовки. Цель этого протокола — обойти CDN, которые не поддерживают WS, а такие CDN обычно ведут себя не очень хорошо.
* Следует предполагать, что все HTTP-соединения не поддерживают потоковые запросы, поэтому размер каждого пакета, отправляемого по исходящему соединению, должен основываться на задержке, пропускной способности и ограничениях самого промежуточного узла (аналогично MTU и алгоритму Нейгла в TCP).
* Следует предполагать, что все HTTP-соединения не поддерживают потоковые запросы, поэтому размер каждого пакета, отправляемого по исходящему соединению, должен основываться на задержке, пропускной способности и ограничениях самого промежуточного узла (аналогично MTU и алгоритму Нейгла в TCP).