Skip to content

Commit e3c7eee

Browse files
committed
XHTTP: Beyond REALITY
XTLS/Xray-core#4113
1 parent dcc3947 commit e3c7eee

File tree

36 files changed

+284
-1236
lines changed

36 files changed

+284
-1236
lines changed

docs/.vuepress/config/sidebar/en.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,12 @@ export const sidebarEn: SidebarConfig = {
6363
{
6464
text: 'transport',
6565
children: [
66-
'/en/config/transports/grpc.md',
67-
'/en/config/transports/h2.md',
66+
'/en/config/transports/raw.md',
67+
'/en/config/transports/xhttp.md',
6868
'/en/config/transports/mkcp.md',
69-
'/en/config/transports/tcp.md',
69+
'/en/config/transports/grpc.md',
7070
'/en/config/transports/websocket.md',
7171
'/en/config/transports/httpupgrade.md',
72-
'/en/config/transports/splithttp.md'
7372
],
7473
},
7574
],

docs/.vuepress/config/sidebar/ru.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,12 @@ export const sidebarRu: SidebarConfig = {
6363
{
6464
text: 'Транспортный уровень',
6565
children: [
66-
'/ru/config/transports/grpc.md',
67-
'/ru/config/transports/http.md',
68-
'/ru/config/transports/mkcp.md',
6966
'/ru/config/transports/raw.md',
67+
'/ru/config/transports/xhttp.md',
68+
'/ru/config/transports/mkcp.md',
69+
'/ru/config/transports/grpc.md',
7070
'/ru/config/transports/websocket.md',
7171
'/ru/config/transports/httpupgrade.md',
72-
'/ru/config/transports/splithttp.md'
7372
],
7473
},
7574
],

docs/.vuepress/config/sidebar/zh.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,12 @@ export const sidebarZh: SidebarConfig = {
6363
{
6464
text: '底层传输',
6565
children: [
66-
'/config/transports/grpc.md',
67-
'/config/transports/http.md',
68-
'/config/transports/mkcp.md',
6966
'/config/transports/raw.md',
67+
'/config/transports/xhttp.md',
68+
'/config/transports/mkcp.md',
69+
'/config/transports/grpc.md',
7070
'/config/transports/websocket.md',
7171
'/config/transports/httpupgrade.md',
72-
'/config/transports/splithttp.md'
7372
],
7473
},
7574
],

docs/config/features/browser_dialer.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
不过目前的浏览器转发有以下缺点:
1212
* 用户需要手动开浏览器
1313
* 浏览器发出的连接必须直连 使用 tun 的用户需要特别注意容易形成死循环
14-
* 浏览器只能发出 HTTP 连接 所以目前仅支持 [WebSocket](../../transports/websocket.md)[XHTTP](../../transports/splithttp.md) 传输方式
14+
* 浏览器只能发出 HTTP 连接 所以目前仅支持 [WebSocket](../../transports/websocket.md)[XHTTP](https://github.com/XTLS/Xray-core/discussions/4113) 传输方式
1515
* 当浏览器从 `localhost:8080` 页面连接至代理服务端,需要考虑 [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
1616
* 因为中间经过 JS 处理数据,会有一些性能损耗
1717
* 不能使用自定义 SNI 或者 Host,也就是说 `SNI == host == address`。自定义 HTTP 头以及其它 `tlsSettings` 项会被忽略
@@ -44,6 +44,6 @@
4444

4545
<Badge text="v1.8.19+" type="warning"/>
4646

47-
XHTTP 本身支持 QUIC,如果想使用浏览器自己的 QUIC 网络栈,Chrome 可以在 `chrome://flags` 中设定。其它浏览器也有相关选项。
47+
[XHTTP](https://github.com/XTLS/Xray-core/discussions/4113) 本身支持 QUIC,如果想使用浏览器自己的 QUIC 网络栈,Chrome 可以在 `chrome://flags` 中设定。其它浏览器也有相关选项。
4848

4949
原理上说 `tlsSettings` 项会被忽略,使用哪个 HTTP 版本将完全由浏览器决定。

docs/config/transport.md

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,16 @@
1010

1111
```json
1212
{
13-
"network": "tcp",
13+
"network": "raw",
1414
"security": "none",
1515
"tlsSettings": {},
1616
"realitySettings": {},
17-
"tcpSettings": {},
17+
"rawSettings": {},
18+
"xhttpSettings": {},
1819
"kcpSettings": {},
19-
"wsSettings": {},
20-
"httpSettings": {},
2120
"grpcSettings": {},
21+
"wsSettings": {},
2222
"httpupgradeSettings": {},
23-
"xhttpSettings": {},
2423
"sockopt": {
2524
"mark": 0,
2625
"tcpMaxSeg": 1440,
@@ -42,16 +41,12 @@
4241
}
4342
```
4443

45-
> `network`: "raw" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "xhttp"
44+
> `network`: "raw" | "xhttp" | "kcp" | "grpc" | "ws" | "httpupgrade"
4645
47-
连接的数据流所使用的传输方式类型,默认值为 `"raw"`
46+
连接的数据流所使用的传输方式类型,默认值为 `"raw"`
4847

4948
::: tip
50-
v24.9.30 版本后,为了更贴近实际行为,tcp传输方式已更名为raw, 为了兼容性,`"network": "raw"` 和 "network": "tcp", `rawSettings``tcpSettings` 互为别名
51-
:::
52-
53-
::: tip
54-
"h2" 可以写成 "http","grpc" 可以写成 "gun","kcp" 可以写成 "mkcp"。
49+
After v24.9.30, the TCP transport has been renamed to RAW to more closely match actual behavior. `"network": "raw"` and `"network": "tcp"`, `rawSettings` and `tcpSettings` are aliases for each other for compatibility.
5550
:::
5651

5752
> `security`: "none" | "tls" | "reality"
@@ -75,34 +70,30 @@ Reality 是目前最安全的传输加密方案, 且外部看来流量类型和
7570
达到数倍甚至十几倍的性能提升。
7671
:::
7772

78-
> `rawSettings`: [TcpObject](./transports/raw.md)
73+
> `rawSettings`: [RawObject](./transports/raw.md)
7974
80-
当前连接的 raw 配置,仅当此连接使用 raw 时有效。
75+
当前连接的 RAW 配置,仅当此连接使用 RAW 时有效。
8176

82-
> `kcpSettings`: [KcpObject](./transports/mkcp.md)
77+
> `xhttpSettings`: [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)
8378
84-
当前连接的 mKCP 配置,仅当此连接使用 mKCP 时有效。
79+
当前连接的 XHTTP 配置,仅当此连接使用 XHTTP 时有效。
8580

86-
> `wsSettings`: [WebSocketObject](./transports/websocket.md)
81+
> `kcpSettings`: [KcpObject](./transports/mkcp.md)
8782
88-
当前连接的 WebSocket 配置,仅当此连接使用 WebSocket 时有效。
83+
当前连接的 mKCP 配置,仅当此连接使用 mKCP 时有效。
8984

90-
> `httpSettings`: [HttpObject](./transports/http.md)
85+
> `grpcSettings`: [GRPCObject](./transports/grpc.md)
9186
92-
当前连接的 HTTP 配置,仅当此连接使用 HTTP 时有效。
87+
当前连接的 gRPC 配置,仅当此连接使用 gRPC 时有效。
9388

94-
> `grpcSettings`: [GRPCObject](./transports/grpc.md)
89+
> `wsSettings`: [WebSocketObject](./transports/websocket.md)
9590
96-
当前连接的 gRPC 配置,仅当此连接使用 gRPC 时有效
91+
当前连接的 WebSocket 配置,仅当此连接使用 WebSocket 时有效。
9792

9893
> `httpupgradeSettings`: [HttpUpgradeObject](./transports/httpupgrade.md)
9994
10095
当前连接的 HTTPUpgrade 配置,仅当此连接使用 HTTPUpgrade 时有效。
10196

102-
> `xhttpSettings`: [XHttpObject](./transports/splithttp.md)
103-
104-
当前连接的 XHTTP 配置,仅当此连接使用 XHTTP 时有效。
105-
10697
> `sockopt`: [SockoptObject](#sockoptobject)
10798
10899
透明代理相关的具体配置。

docs/config/transports/grpc.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
它基于 HTTP/2 协议,理论上可以通过其它支持 HTTP/2 的服务器(如 Nginx)进行中转。
66
gRPC(HTTP/2)内置多路复用,不建议使用 gRPC 与 HTTP/2 时启用 mux.cool。
77

8+
::: danger
9+
**推荐换用 [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113),其相较于 gRPC 的优势已在 STREAM-UP/ONE 小节中注明。**
10+
:::
11+
812
::: warning ⚠⚠⚠
913

1014
- gRPC 不支持指定 Host。请在出站代理地址中填写 **正确的域名** ,或在 `(x)tlsSettings` 中填写 `ServerName`,否则无法连接。

docs/config/transports/h2.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# HTTP/2
2+
3+
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)

docs/config/transports/http.md

Lines changed: 1 addition & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,3 @@
11
# HTTP
22

3-
基于 HTTP/2 或 HTTP/3 的传输方式。
4-
5-
它完整按照 HTTP 标准实现,可以通过其它的 HTTP 服务器(如 Nginx)进行中转。
6-
7-
客户端必须开启 TLS 才可以正常使用这个传输方式。
8-
9-
HTTP/2和3 内置多路复用,不建议使用时启用 mux.cool。
10-
11-
::: tip
12-
当前版本的 HTTP/2 的传输方式并不强制要求**入站****服务端**)有 TLS 配置.
13-
这使得可以在特殊用途的分流部署环境中,由外部网关组件完成 TLS 层对话,Xray 作为后端应用,网关和 Xray 间使用明文HTTP进行通讯。
14-
:::
15-
16-
::: tip
17-
当alpn有且仅有 `h3` 时,该传输才会工作在h3模式。
18-
:::
19-
20-
::: warning
21-
- HTTP/2 和 HTTP/3 无法通过xray的回落 Path 进行分流,不建议使用回落分流。
22-
:::
23-
24-
## HttpObject
25-
26-
`HttpObject` 对应传输配置的 `httpSettings` 项。
27-
28-
```json
29-
{
30-
"host": ["xray.com"],
31-
"path": "/random/path",
32-
"read_idle_timeout": 10,
33-
"health_check_timeout": 15,
34-
"method": "PUT",
35-
"headers": {
36-
"Header": ["value"]
37-
}
38-
}
39-
```
40-
41-
> `host`: \[string\]
42-
43-
一个字符串数组,每一个元素是一个域名。
44-
45-
客户端会随机从列表中选出一个域名进行通信,服务器会验证域名是否在列表中。
46-
47-
::: tip
48-
若不写 `"httpSettings"``"host": []` 值留空时,会使用默认值 `"www.example.com"`,需要两端 `"host"` 值一致才能连接成功。`"host": [""]` 不是值留空。
49-
:::
50-
51-
> `path`: string
52-
53-
HTTP 路径,由 `/` 开头, 客户端和服务器必须一致。
54-
55-
默认值为 `"/"`
56-
57-
> `read_idle_timeout`: number
58-
59-
单位秒,当这段时间内没有接收到数据时,将会进行健康检查。
60-
61-
健康检查默认**不启用**
62-
63-
::: tip
64-
**只需****出站****客户端**)配置。
65-
:::
66-
67-
::: tip
68-
可能会解决一些“断流”问题。
69-
:::
70-
71-
> `health_check_timeout`: number
72-
73-
单位秒,健康检查的超时时间。如果在这段时间内没有完成健康检查,即认为健康检查失败。默认值为 `15`
74-
75-
::: tip
76-
**只需****出站****客户端**)配置。
77-
:::
78-
79-
> `method`: string
80-
81-
HTTP 方法。默认值为 `"PUT"`
82-
83-
设置时应参照[此处](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)列出值。
84-
85-
> `headers`: map{ string: \[string\] }
86-
87-
仅客户端,自定义 HTTP 头,一个键值对,每个键表示一个 HTTP 头名称,对应值为一个数组。
3+
See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)

docs/config/transports/httpupgrade.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
一个实现了类似于 WebSocket 进行 HTTP 1.1 升级请求和响应的协议,这使得它可以像 WebSocket 一样可以被CDN或者Nginx进行反代,但无需实现 WebSocket 协议的其他部分,所以具有更高的效率。
44
其设计不推荐单独使用,而是和TLS等安全协议一起工作。
55

6+
::: danger
7+
**推荐换用 [XHTTP](https://github.com/XTLS/Xray-core/discussions/4113),以避免 HTTPUpgrade “ALPN 是 http/1.1” 等显著流量特征。**
8+
:::
9+
610
## HttpUpgradeObject
711

812
`HttpUpgradeObject` 对应传输配置的 `httpupgradeSettings` 项。

docs/config/transports/raw.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# RAW
22

3-
更名自曾经的tcp传输(原名称稍有歧义) RAW传输出站发送的原始数据,核心不使用其他协议(如 websocket)承载其流量。
3+
更名自曾经的 TCP 传输(原名称有歧义),RAW 传输出站发送原始数据,核心不使用其它协议(如 XHTTP)承载其流量。
44

5-
可以和各种协议有多种组合模式.
5+
可以和各种协议有多种组合模式
66

77
## RawObject
88

0 commit comments

Comments
 (0)