* ru Add xhttp mode downloadSettings and extrapull/608/head
							parent
							
								
									8a908de60b
								
							
						
					
					
						commit
						2f70265fb0
					
				| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 | 
			
		||||
<Badge text="v1.8.16+" type="warning"/>
 | 
			
		||||
 | 
			
		||||
Используется для загрузки с помощью 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).
 | 
			
		||||
* Следует предполагать, что все HTTP-соединения не поддерживают потоковые запросы, поэтому размер каждого пакета, отправляемого по исходящему соединению, должен основываться на задержке, пропускной способности и ограничениях самого промежуточного узла (аналогично MTU и алгоритму Нейгла в TCP).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue