全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 568|回复: 5

xhttp到底是个啥

[复制链接]
发表于 2025-5-29 14:45:26 | 显示全部楼层 |阅读模式
没部署过
他可以回程走hy2吗
发表于 2025-5-29 16:29:49 | 显示全部楼层
就是伪装正常的网页提交数据
发表于 2025-5-29 16:31:48 | 显示全部楼层
alog148 发表于 2025-5-29 16:29
就是伪装正常的网页提交数据

谁家网页返回那么多数据。。。
发表于 2025-5-29 16:32:42 | 显示全部楼层
分段上传,流式下载
  1. https://www.有图比.com/watch?v=GB_SHmqotzQ
复制代码
发表于 2025-5-29 16:33:04 | 显示全部楼层
本帖最后由 alog148 于 2025-5-29 16:34 编辑
蒙面人 发表于 2025-5-29 16:31
谁家网页返回那么多数据。。。


拆包啊,你没看文档说明吗

分段上传,流式下载

对于 XHTTP 兼容性最强的“分包上行、流式下行”,即 packet-up 模式,我们是这样设计的:

客户端 POST /yourpath/sameUUID/seq 以发送上行数据:

UUID 是随机生成的,等下启动下行时的 UUID 与它相同,以便服务端关联,若服务端未在 30 秒内成功关联,将终止会话
seq 从 0 开始,必须发完上一个 POST 的 body(但无需等响应)再发下一个
多个 POST 有小概率乱序到达服务端,服务端会按 seq 进行重组,默认最多缓存 30 个,超限断连
注意 UUID 和 seq 都设计在 path 里而非 query string,以避免遇到奇怪的问题
客户端 GET /yourpath/sameUUID 启动下行,服务端响应头包含:

X-Accel-Buffering: no 以告知中间盒禁用缓冲
Cache-Control: no-store 以告知中间盒无需缓存
Content-Type: text/event-stream 以伪装成 server-sent events(兼容性更好,可以设置 noSSEHeader 以关闭)
若为 HTTP/1.1 还需包含 Transfer-Encoding: chunked,H2/H3 则不需要
为了避免浏览器转发 Browser Dialer 遇到跨域限制,服务端针对所有 GET、POST 的响应头都会包含:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
为了解决 HTTP 请求头和响应头的固定长度特征:

客户端发的 request header 均默认包含 Referer: ...?x_padding=XXX...(放 Referer 是为了防止 Browser Dialer 产生不必要的 OPTIONS 请求),默认长度为 100-1000,每次请求随机,服务端默认会检查它是否在服务端允许的范围内
服务端发的 response header 均默认包含 X-Padding: XXX...,默认长度为 100-1000,每次响应随机
这便是我多次提及的 header padding,对应设置项为 xPaddingBytes
请求头的 padding 改为放到 Referer 由 @rPDmYQ 提出,选用 XXX 也是,X 在 huffman encoding 中为 8 bit
分包上行、Referer: ...?x_padding=XXX... 会产生较多、较长的日志,你可以在反代软件中设置不记录它们。

此外,和 Xray 的其它传输层一样,服务端也接受 X-Forwarded-For header 以取得客户端的真实 IP,也会依据服务端设置的 host 来检查客户端发来的 host(个人建议是没事别设,毕竟已经隐藏在 path 后面了)。

以上就是 packet-up 模式的最简化、必要流程,不过此时还有个小问题:如何具体实施、限制 POST 请求?有三个专属参数:

scMaxEachPostBytes:客户端每个 POST 最多携带多少数据,默认值 1000000 即 1MB,该值应小于 CDN 等 HTTP 中间盒所允许的最大值,服务端也会拒绝大于该值的 POST
scMinPostsIntervalMs:仅客户端,基于单个代理请求,客户端发起 POST 请求的最小间隔,默认值 30 毫秒
scMaxBufferedPosts:仅服务端,基于单个代理请求,服务端最多缓存多少个 POST 请求,默认值 30 个,超限断连
“基于单个代理请求”的意思是每个代理请求各自计数、互不影响,即使它们在同一条 H2 / H3 连接内,这便是 sc 即 sub-connection 的含义。为了减少指纹,前两个值可以设为范围的形式,比如分别为字符串 "500000-1000000"、"10-50",每次随机。这些参数都可以通过 extra 下发给客户端,文末有说明。此外值得一提的是,Xray 最新版优化了 packet-up,速率甚至直追 stream-up,主要利好 QUIC H3 过 CDN。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-6-10 17:43 , Processed in 0.070055 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表