|
1 | | -# XHTTP: Beyond REALITY |
| 1 | +# XHTTP |
| 2 | + |
| 3 | +基于 HTTP 的高可拓展性传输协议,主要用于在 CDN 或反代环境下,将代理流量伪装成标准网页浏览流量以实现高效穿透。 |
| 4 | + |
| 5 | +See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113)。 |
| 6 | + |
| 7 | +## XHTTPObject |
| 8 | + |
| 9 | +`XHTTPObject` 对应传输配置的 `xhttpSettings` 项。 |
| 10 | + |
| 11 | +```json |
| 12 | +{ |
| 13 | + "path": "/xhttp", |
| 14 | + "mode": "auto", |
| 15 | + "extra": { |
| 16 | + "noSSEHeader": false, |
| 17 | + "scMaxEachPostBytes": 1000000, |
| 18 | + "scMaxBufferedPosts": 30, |
| 19 | + "xPaddingBytes": "10-100" |
| 20 | + } |
| 21 | +} |
| 22 | +``` |
| 23 | + |
| 24 | +> `path`: string |
| 25 | +
|
| 26 | +XHTTP 所使用的 HTTP 协议路径前缀。 |
| 27 | + |
| 28 | +最终请求为`GET /yourpath/sameUUID`(上行),`POST /yourpath/sameUUID/seq`(下行)。 |
| 29 | + |
| 30 | +> `mode`: "auto" | "packet-up" | "stream-up" | "stream-one" |
| 31 | +
|
| 32 | +XHTTP使用的模式,默认为`"auto"`。 |
| 33 | + |
| 34 | +> `host`: string |
| 35 | +
|
| 36 | +XHTTP 的HTTP请求中所发送的host,默认值为空。若服务端值为空时,不验证客户端发送来的host值。 |
| 37 | + |
| 38 | +当在服务端指定该值,或在 `headers` 中指定host,将会校验与客户端请求host是否一致。 |
| 39 | + |
| 40 | +客户端选择发送的host优先级 `host` > `headers` > `address` |
| 41 | + |
| 42 | +> `headers`: map \{string: string\} |
| 43 | +
|
| 44 | +仅客户端,自定义 HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,对应的值是字符串。 |
| 45 | + |
| 46 | +不可在此处设置host header。 |
| 47 | + |
| 48 | +默认值为空。 |
| 49 | + |
| 50 | +> `scStreamUpServerSecs`: string |
| 51 | +
|
| 52 | +[Int32Range](../../development/intro/guide.md#int32range)类型。 |
| 53 | + |
| 54 | +仅客户端,测试发现 CF 会掐断下行 100 秒无实际数据的 HTTP,导致 stream-up 的上行方向被掐断,所以为服务端添加了 scStreamUpServerSecs,默认值 "20-80" 取随机。 |
| 55 | + |
| 56 | +设置为-1则关闭此机制。 |
| 57 | + |
| 58 | +> `xPaddingBytes`: string |
| 59 | +
|
| 60 | +[Int32Range](../../development/intro/guide.md#int32range)类型。 |
| 61 | + |
| 62 | +服务端每隔 scStreamUpServerSecs 时间就会发 xPaddingBytes 个字节以保活 |
| 63 | + |
| 64 | +> `noGRPCHeader`: bool |
| 65 | +
|
| 66 | +仅客户端, |
| 67 | + |
| 68 | +false: 上行均默认有 `Content-Type: application/grpc` 以伪装成 gRPC |
| 69 | +true: 关闭上述行为 |
| 70 | + |
| 71 | +> `noSSEHeader`: bool |
| 72 | +
|
| 73 | +仅服务端, |
| 74 | + |
| 75 | +false: 下行的服务端响应头会包含`Content-Type: text/event-stream`,以伪装为SSE。 |
| 76 | +true: 关闭上述行为。 |
| 77 | + |
| 78 | +> `scMaxEachPostBytes`: string |
| 79 | +
|
| 80 | +[Int32Range](../../development/intro/guide.md#int32range)类型。 |
| 81 | + |
| 82 | +客户端每个 POST 最多携带多少数据,默认值 1000000 即 1MB,该值应小于 CDN 等 HTTP 中间盒所允许的最大值,服务端也会拒绝大于该值的 POST |
| 83 | + |
| 84 | +> `scMinPostsIntervalMs`: string |
| 85 | +
|
| 86 | +[Int32Range](../../development/intro/guide.md#int32range)类型。 |
| 87 | + |
| 88 | +仅客户端,基于单个代理请求,客户端发起 POST 请求的最小间隔,默认值 30 毫秒 |
| 89 | + |
| 90 | +> `scMaxBufferedPosts`: int64 |
| 91 | +
|
| 92 | +仅服务端,基于单个代理请求,服务端最多缓存多少个 POST 请求,默认值 30 个,超限断连 |
| 93 | + |
| 94 | +> `xmux`: \[ [XmuxObject](#xmuxobject) \] |
| 95 | +
|
| 96 | +仅客户端, |
| 97 | + |
| 98 | +> `downloadSettings`: \[ [StreamSettingsObject](../transport.md#streamsettingsobject) \] |
| 99 | +
|
| 100 | +可以对下行流量进行单独配置,比如更换域名等。 |
| 101 | + |
| 102 | +> `extra`: json object |
| 103 | +
|
| 104 | +`extra` 是 `host`、`path`、`mode` 以外的所有参数的原始 JSON,当 extra 存在时,只有该四项会生效。 |
| 105 | + |
| 106 | +## XmuxObject |
| 107 | + |
| 108 | +多路复用配置。 |
| 109 | + |
| 110 | +> maxConcurrency: [Int32Range](../../development/intro/guide.md#int32range) |
| 111 | +
|
| 112 | +每条 H2/H3 连接中最多同时存在的代理请求数量,超出后会建立新的连接 |
| 113 | + |
| 114 | +> maxConnections: [Int32Range](../../development/intro/guide.md#int32range) |
| 115 | +
|
| 116 | +同时存在的连接数。 0 为不限制。 |
| 117 | + |
| 118 | +> cMaxReuseTimes: [Int32Range](../../development/intro/guide.md#int32range) |
| 119 | +
|
| 120 | +每条连接最多被复用的次数 |
| 121 | + |
| 122 | +> cMaxLifetimeMs: [Int32Range](../../development/intro/guide.md#int32range) |
| 123 | +
|
| 124 | +每条连接的存活时间。 0 为不限制。 |
| 125 | + |
| 126 | +> hMaxRequestTimes: [Int32Range](../../development/intro/guide.md#int32range) |
| 127 | +
|
| 128 | +每条连接最多承载多少个请求。 |
| 129 | + |
| 130 | +> hKeepAlivePeriod: int64 |
| 131 | +
|
| 132 | +H2/H3 连接空闲时客户端每隔多少秒发一次保活包,默认 0,即 Chrome H2 的 45 秒,或 quic-go H3 的 10 秒 |
2 | 133 |
|
3 | | -See [XHTTP: Beyond REALITY](https://github.com/XTLS/Xray-core/discussions/4113) |
|
0 commit comments