Rename xhttp
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 @@
|
|||
# SplitHTTP(H2、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…
Reference in New Issue