Rename xhttp

pull/607/head
yuhan6665 6 days ago
parent 06408d94a8
commit 0eacffc92a

@ -11,13 +11,13 @@
不过目前的浏览器转发有以下缺点:
* 用户需要手动开浏览器
* 浏览器发出的连接必须直连 使用 tun 的用户需要特别注意容易形成死循环
* 浏览器只能发出 HTTP 连接 所以目前仅支持 [WebSocket](../../transports/websocket.md) 与 [SplitHTTP](../../transports/splithttp.md) 传输方式
* 浏览器只能发出 HTTP 连接 所以目前仅支持 [WebSocket](../../transports/websocket.md) 与 [XHTTP](../../transports/splithttp.md) 传输方式
* 当浏览器从 `localhost:8080` 页面连接至代理服务端,需要考虑 [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
* 因为中间经过 JS 处理数据,会有一些性能损耗
* 不能使用自定义 SNI 或者 Host也就是说 `SNI == host == address`。自定义 HTTP 头以及其它 `tlsSettings` 项会被忽略
## 配置方法
1. 准备一份 WebSocket 或 SplitHTTP 配置,注意 address 必须填域名,若需要指定 IP请配置 DNS 或系统 hosts
1. 准备一份 WebSocket 或 XHTTP 配置,注意 address 必须填域名,若需要指定 IP请配置 DNS 或系统 hosts
2. 使用环境变量启动 Xray `XRAY_BROWSER_DIALER=127.0.0.1:8080`。Windows 上命令为 `set XRAY_BROWSER_DIALER=127.0.0.1:8080` Linux 上命令为 `XRAY_BROWSER_DIALER=127.0.0.1:8080 ./xray -c config.json`
3. 确保浏览器直连(或者在路由中将服务端地址直接由 `freedom` 发出),打开页面 `localhost:8080`,还可以 `F12``Console``Network`
4. 浏览器会限制发出的连接数,所以建议开启 `Mux.Cool`
@ -40,10 +40,10 @@
- 用于浏览器的 early data 编码是 `base64.RawURLEncoding` 而不是 `StdEncoding`,服务端做了兼容。
- 此外,由于 [Xray-core#375](https://github.com/XTLS/Xray-core/pull/375) 推荐 `?ed=2048`,这个 PR 顺便将服务端一处 `MaxHeaderBytes` 扩至了 4096。 ~~(虽然好像不改也没问题)~~
## SplitHTTP
## XHTTP
<Badge text="v1.8.19+" type="warning"/>
SplitHTTP 本身支持 QUIC如果想使用浏览器自己的 QUIC 网络栈Chrome 可以在 `chrome://flags` 中设定。其它浏览器也有相关选项。
XHTTP 本身支持 QUIC如果想使用浏览器自己的 QUIC 网络栈Chrome 可以在 `chrome://flags` 中设定。其它浏览器也有相关选项。
原理上说 `tlsSettings` 项会被忽略,使用哪个 HTTP 版本将完全由浏览器决定。

@ -20,7 +20,7 @@
"httpSettings": {},
"grpcSettings": {},
"httpupgradeSettings": {},
"splithttpSettings": {},
"xhttpSettings": {},
"sockopt": {
"mark": 0,
"tcpMaxSeg": 1440,
@ -42,7 +42,7 @@
}
```
> `network`: "raw" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "splithttp"
> `network`: "raw" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "xhttp"
连接的数据流所使用的传输方式类型,默认值为 `"raw"`
@ -99,9 +99,9 @@ Reality 是目前最安全的传输加密方案, 且外部看来流量类型和
当前连接的 HTTPUpgrade 配置,仅当此连接使用 HTTPUpgrade 时有效。
> `splithttpSettings`: [SplitHttpObject](./transports/splithttp.md)
> `xhttpSettings`: [XHttpObject](./transports/splithttp.md)
当前连接的 SplitHTTP 配置,仅当此连接使用 SplitHTTP 时有效。
当前连接的 XHTTP 配置,仅当此连接使用 XHTTP 时有效。
> `sockopt`: [SockoptObject](#sockoptobject)

@ -1,4 +1,4 @@
# SplitHTTPH2、QUIC H3
# XHTTP (SplitHTTP)
<Badge text="v1.8.16+" type="warning"/>
@ -10,11 +10,11 @@
目的与V2fly Meek相同由于使用了流式响应处理下载下行速率更为优秀上行也经过优化但仍非常有限也因此对 HTTP 中间盒要求更高(见上)。
`SplitHTTP` 也接受 `X-Forwarded-For` header。
`XHTTP` 也接受 `X-Forwarded-For` header。
## SplitHttpObject
## XHttpObject
The `SplitHttpObject` 对应传输配置的 `splithttpSettings` 项。
The `XHttpObject` 对应传输配置的 `xhttpSettings` 项。
```json
{
@ -39,11 +39,11 @@ The `SplitHttpObject` 对应传输配置的 `splithttpSettings` 项。
> `path`: string
SplitHTTP 所使用的 HTTP 协议路径,默认值为 `"/"`
XHTTP 所使用的 HTTP 协议路径,默认值为 `"/"`
> `host`: string
SplitHTTP 的HTTP请求中所发送的host默认值为空。若服务端值为空时不验证客户端发送来的host值。
XHTTP 的HTTP请求中所发送的host默认值为空。若服务端值为空时不验证客户端发送来的host值。
当在服务端指定该值,或在 ```headers``` 中指定host将会校验与客户端请求host是否一致。
@ -95,7 +95,7 @@ SplitHTTP 的HTTP请求中所发送的host默认值为空。若服务端值
<Badge text="v24.9.19+" type="warning"/>
仅客户端,允许用户对 SplitHTTP 在 h2 与 h3 中的多路复用行为进行控制。使用该功能时不要启用 mux.cool。
仅客户端,允许用户对 XHTTP 在 h2 与 h3 中的多路复用行为进行控制。使用该功能时不要启用 mux.cool。
```json
{

@ -14,14 +14,14 @@ However, there are many drawbacks:
* The user has to launch a browser next to the Xray client just for opening the proxy connection.
* The browser dialer must not be tunneled through the proxy itself, otherwise there is a loop. TUN users should be cautious.
* The browser can only speak standard HTTP, which means that only [WebSocket](../../transports/websocket.md) and [SplitHTTP](../../transports/splithttp.md) are supported
* The browser can only speak standard HTTP, which means that only [WebSocket](../../transports/websocket.md) and [XHTTP](../../transports/splithttp.md) are supported
* [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) needs to be considered when making requests from one website (`localhost:8080`) to another (`proxy.example.com:443`)
* The browser tunnels your traffic using JavaScript, so there is a significant performance penalty (or, battery drain)
* The configuration to be used with browser dialer cannot use custom SNI or host headers. `SNI == host == address`. Custom HTTP headers and `tlsSettings` are ignored entirely.
## Configuration
1. Prepare a usable WebSocket or SplitHTTP configuration. Be aware of the above restrictions.
1. Prepare a usable WebSocket or XHTTP configuration. Be aware of the above restrictions.
2. Launch Xray with `XRAY_BROWSER_DIALER=127.0.0.1:8080`. On Windows, this can be done as `set XRAY_BROWSER_DIALER=...` and then launching the core from the console, on Linux the core can be launched as `XRAY_BROWSER_DIALER=127.0.0.1:8080 ./xray -c config.json`.
3. Open a browser that is not tunneled through the proxy, or modify the config's routing such that the Xray server's domain goes to `freedom` directly from the client. Browse to `localhost:8080`, and open the developer console with `F12` to monitor for errors.
4. For better performance and to bypass arbitrary connection limits enforced by the browser, it is recommended to enable `Mux.Cool`.
@ -44,10 +44,10 @@ According to the browser's needs, the early data mechanism has been adjusted as
- The encoding used for early data for browsers is `base64.RawURLEncoding` instead of `StdEncoding`, and the server has made it compatible.
- In addition, due to [Xray-core#375](https://github.com/XTLS/Xray-core/pull/375) recommendations for `?ed=2048`, this PR also increased server `MaxHeaderBytes` by 4096. ~~(Although it seems like it would work without modification.)~~
## SplitHTTP
## XHTTP
<Badge text="v1.8.19+" type="warning"/>
SplitHTTP supports QUIC, but the browser's own QUIC stack may be used as well. In Chrome this can be done through `chrome://flags`, in other browsers it may already be enabled or need a different flag.
XHTTP supports QUIC, but the browser's own QUIC stack may be used as well. In Chrome this can be done through `chrome://flags`, in other browsers it may already be enabled or need a different flag.
In general, `tlsSettings` are completely ignored when Browser Dialer is used. Xray does not have any control over which HTTP version the browser selects.

@ -20,7 +20,7 @@ Transports specify how to achieve stable data transmission. Both ends of a conne
"httpSettings": {},
"grpcSettings": {},
"httpupgradeSettings": {},
"splithttpSettings": {},
"xhttpSettings": {},
"sockopt": {
"mark": 0,
"tcpMaxSeg": 1440,
@ -42,7 +42,7 @@ Transports specify how to achieve stable data transmission. Both ends of a conne
}
```
> `network`: "tcp" | "kcp" | "ws" | "http" | "grpc" | "httpupgrade" | "splithttp"
> `network`: "tcp" | "kcp" | "ws" | "http" | "grpc" | "httpupgrade" | "xhttp"
The underlying protocol of the transport used by the data stream of the connection, defaulting to `"tcp"`.
@ -90,9 +90,9 @@ Configures the current gRPC connection. Valid only when gRPC is used. Same schem
Configures the current HTTPUpgrade connection. Valid only when HTTPUpgrade is used. Same schema as global.
> `splithttpSettings`: [SplitHttpObject](./transports/splithttp.md)
> `xhttpSettings`: [XHttpObject](./transports/splithttp.md)
Configures SplitHTTP connections. Valid only when SplitHTTP is used. Same schema as global.
Configures XHTTP connections. Valid only when XHTTP is used. Same schema as global.
> `sockopt`: [SockoptObject](#sockoptobject)

@ -1,4 +1,4 @@
# SplitHTTP
# XHTTP (SplitHTTP)
<Badge text="v1.8.16+" type="warning"/>
@ -13,11 +13,11 @@ above streaming requirement to the CDN so that download can be much faster than
(v2fly) Meek, close to WebSocket performance. The upload is also optimized, but
still much more limited than WebSocket.
Like WebSocket transport, SplitHTTP parses the `X-Forwarded-For` header for logging.
Like WebSocket transport, XHTTP parses the `X-Forwarded-For` header for logging.
## SplitHttpObject
## XHttpObject
The `SplitHttpObject` corresponds to the `splithttpSettings` section under transport configurations.
The `XHttpObject` corresponds to the `xhttpSettings` section under transport configurations.
```json
{
@ -150,7 +150,7 @@ Default 0 = infinite. How long can a connection "survive" at most? When the conn
*Added in 1.8.21: HTTP/3 support*
SplitHTTP supports `http/1.1`, `h2` and `h3` ALPN values. If the value is not
XHTTP supports `http/1.1`, `h2` and `h3` ALPN values. If the value is not
set, `h2` (prior-knowledge) is assumed when TLS is enabled, and `http/1.1`
without TLS. If the value is set to `h3`, the client will attempt to connect as
HTTP/3, so UDP instead of TCP.
@ -180,7 +180,7 @@ even if the client speaks `h3`.
<Badge text="v1.8.17+" type="warning"/>
If uTLS is not enough, SplitHTTP's TLS can be handled by a browser using [Browser Dialer](../features/browser_dialer.md)
If uTLS is not enough, XHTTP's TLS can be handled by a browser using [Browser Dialer](../features/browser_dialer.md)
## Protocol details

@ -14,14 +14,14 @@ Xray обычно использует uTLS для имитации поведе
* Пользователь должен запускать браузер рядом с клиентом Xray только для открытия прокси-соединения.
* Browser Dialer не должен быть туннелирован через сам прокси, иначе возникнет петля. Пользователи TUN должны быть осторожны.
* Браузер может работать только со стандартным HTTP, что означает, что поддерживаются только [WebSocket](../../transports/websocket.md) и [SplitHTTP](../../transports/splithttp.md).
* Браузер может работать только со стандартным HTTP, что означает, что поддерживаются только [WebSocket](../../transports/websocket.md) и [XHTTP](../../transports/splithttp.md).
* [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) необходимо учитывать при выполнении запросов с одного веб-сайта (`localhost:8080`) на другой (`proxy.example.com:443`).
* Браузер туннелирует ваш трафик с помощью JavaScript, поэтому наблюдается значительное снижение производительности (или разрядка аккумулятора).
* Конфигурация, используемая с Browser Dialer, не может использовать собственные заголовки SNI или хоста. `SNI == host == address`. Пользовательские заголовки HTTP и `tlsSettings` игнорируются полностью.
## Конфигурация
1. Подготовьте рабочую конфигурацию WebSocket или SplitHTTP. Помните о вышеуказанных ограничениях.
1. Подготовьте рабочую конфигурацию WebSocket или XHTTP. Помните о вышеуказанных ограничениях.
2. Запустите Xray с помощью `XRAY_BROWSER_DIALER=127.0.0.1:8080`. В Windows это можно сделать как `set XRAY_BROWSER_DIALER=...`, а затем запустить ядро из консоли, в Linux ядро можно запустить как `XRAY_BROWSER_DIALER=127.0.0.1:8080 ./xray -c config.json`.
3. Откройте браузер, который не туннелирован через прокси, или измените маршрутизацию конфигурации таким образом, чтобы домен сервера Xray переходил к `freedom` непосредственно с клиента. Перейдите по адресу `localhost:8080` и откройте консоль разработчика с помощью `F12`, чтобы отслеживать ошибки.
4. Для повышения производительности и обхода произвольных ограничений на подключение, применяемых браузером, рекомендуется включить `Mux.Cool`.
@ -44,11 +44,11 @@ Xray обычно использует uTLS для имитации поведе
- Кодировка, используемая для ранних данных для браузеров, - это `base64.RawURLEncoding` вместо `StdEncoding`, и сервер сделал ее совместимой.
- Кроме того, в связи с [Xray-core#375](https://github.com/XTLS/Xray-core/pull/375) рекомендациями по `?ed=2048` этот PR также увеличил сервер `MaxHeaderBytes` на 4096. ~~(Хотя, похоже, это будет работать и без модификации.)~~
## SplitHTTP
## XHTTP
<Badge text="v1.8.19+" type="warning"/>
SplitHTTP поддерживает QUIC, но также может использоваться собственный стек QUIC браузера. В Chrome это можно сделать через `chrome://flags`, в других браузерах он может быть уже включен или для него может потребоваться другой флаг.
XHTTP поддерживает QUIC, но также может использоваться собственный стек QUIC браузера. В Chrome это можно сделать через `chrome://flags`, в других браузерах он может быть уже включен или для него может потребоваться другой флаг.
В общем, `tlsSettings` полностью игнорируются при использовании Browser Dialer. Xray никак не контролирует, какую версию HTTP выбирает браузер.

@ -22,7 +22,7 @@
"httpSettings": {},
"grpcSettings": {},
"httpupgradeSettings": {},
"splithttpSettings": {},
"xhttpSettings": {},
"sockopt": {
"mark": 0,
"tcpMaxSeg": 1440,
@ -44,7 +44,7 @@
}
```
> `network`: "raw" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "splithttp"
> `network`: "raw" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "xhttp"
Тип способа передачи, используемого потоком данных соединения, по умолчанию `"raw"`
::: tip
@ -99,9 +99,9 @@ Reality — это самое безопасное на данный момен
Конфигурация HTTPUpgrade для текущего соединения, действительна только если это соединение использует HTTPUpgrade.
> `splithttpSettings`: [SplitHttpObject](./transports/splithttp.md)
> `xhttpSettings`: [XHttpObject](./transports/splithttp.md)
Конфигурация SplitHTTP для текущего соединения, действительна только если это соединение использует SplitHTTP.
Конфигурация XHTTP для текущего соединения, действительна только если это соединение использует XHTTP.
> `sockopt`: [SockoptObject](#sockoptobject)

@ -1,4 +1,4 @@
# SplitHTTP (H2, QUIC H3)
# XHTTP (SplitHTTP)
<Badge text="v1.8.16+" type="warning"/>
@ -12,11 +12,11 @@
Цель та же, что и у V2fly Meek, но благодаря использованию фрагментированной загрузки скорость загрузки выше, а скорость отдачи оптимизирована, но все еще очень ограничена, поэтому к HTTP-прокси предъявляются более высокие требования (см. выше).
`SplitHTTP` также принимает заголовок `X-Forwarded-For`.
`XHTTP` также принимает заголовок `X-Forwarded-For`.
## SplitHttpObject
## XHttpObject
`SplitHttpObject` соответствует элементу `splithttpSettings` в конфигурации транспорта.
`XHttpObject` соответствует элементу `xhttpSettings` в конфигурации транспорта.
```json
{
@ -41,11 +41,11 @@
> `path`: string
Путь HTTP-протокола, используемый SplitHTTP. Значение по умолчанию — `"/"`.
Путь HTTP-протокола, используемый XHTTP. Значение по умолчанию — `"/"`.
> `host`: string
Хост, отправляемый в HTTP-запросе SplitHTTP. Значение по умолчанию пустое. Если значение на сервере пустое, значение хоста, отправляемое клиентом, не проверяется.
Хост, отправляемый в HTTP-запросе XHTTP. Значение по умолчанию пустое. Если значение на сервере пустое, значение хоста, отправляемое клиентом, не проверяется.
Если значение указано на сервере или в `headers`, оно будет сравниваться со значением хоста в запросе клиента.
@ -97,7 +97,7 @@
<Badge text="v24.9.19+" type="warning"/>
Только для клиента. Позволяет пользователю контролировать поведение многопоточности SplitHTTP в h2 и h3. Не используйте данную функцию вместе с mux.cool.
Только для клиента. Позволяет пользователю контролировать поведение многопоточности XHTTP в h2 и h3. Не используйте данную функцию вместе с mux.cool.
```json
{

Loading…
Cancel
Save