-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HTTPUpgrade 0-RTT #3152
HTTPUpgrade 0-RTT #3152
Conversation
双端最新commit 好像直接不通 服务端
客户端
换回release版本正常 |
对了我暂时还没加ed参数 |
加了?ed=2048之后确实看到了发送的额外信息 vmess会报错
VLESS会报错
似乎还是没能正确传递内层信息? |
我刚刚编译了文件,VLESS,客户端加了ed=2560,电脑PC连接到VPS是正常的。 配置在这 https://github.com/chika0801/Xray-examples/tree/main/VLESS-WebSocket_or_HTTPUpgrade-TLS 我遇到的问题是v2rayNG用自己编译的(即Xray的最新提交),客户端连接不通服务端。我就没再研究了,等个其他人看遇到没有。 |
Nginx对整个请求的header(包括其他数据)大小限制为8kb caddy更是激进到整整1MB |
这里也要麻烦 @yuhan6665 测一下, |
@Fangliding 鉴于 #3128 (comment) 和 #3152 (comment) ,重新测一下, @chika0801 |
@RPRX 关于 #3152 (comment) ,我用 657c5c8 编译了v2rayNG,NG客户端已经能正常连接服务端了。 在这之前确定试过N次都不能成功连接。
我下载xray文件,上传到路由器上替换,openwrt上现在能正常工作了。
测试了CF的CDN,加和不加ed=2560,都是正常通的。 |
WebSocket header 那一套是伪 0-RTT,只对有握手的数据生效而且不是很优雅,如果这次的实现大家测了没问题那就没必要放 header,早在 #375 我就想这么干了但发现服务端可能会有限制, |
* main: (24 commits) Add "nosni" option to send empty SNI (XTLS#3214) API: add Source IP Block command (XTLS#3211) v1.8.10 Fix TestXrayConfig in xray_test.go Add separate host config for websocket Update proto file for websocket and httpupgrade (breaking) API - Add | Remove Routing Rules (XTLS#3189) Fix host in headers field does not work XTLS#3191 fix: config `burstObservatory` override Bump github.com/sagernet/sing from 0.3.6 to 0.3.8 Add support for HTTPupgrade custom headers improve balancer_info.go Fix(httpupgrade): `X-Forwarded-For` header not read. (XTLS#3172) Allow to send through random IPv6 Update HTTPUpgrade spelling and proto Chore: Clean up legacy `field` usage Update README.md Bump github.com/quic-go/quic-go from 0.41.0 to 0.42.0 Fix HTTPUpgrade transport register HTTPUpgrade 0-RTT (XTLS#3152) ...
原理是 #3128 (comment) ,实现是 5c41292 ,现在在 HTTPUpgrade path 后加上
?ed=2560
才会启用 0-RTT,类似于 #375由于实现原理不同,HTTPUpgrade 的
?ed=2560
实际上没有最大 2560 字节的限制,也就是无限制,与 WebSocket 不同现在起 WebSocket ed 建议填 2560 而不是 2048
Chrome 即将默认启用 X25519Kyber768 key encapsulation for TLS,它会使代理协议头加被代理的 TLS Client Hello 的长度非常接近 2048,未来可能超过 2048,所以为了确保 WebSocket 0-RTT 在未来继续生效,以后建议填 2560 而不是 2048
WebSocket 0-RTT 的实现原理是 Base64 编码后放入 header,编码会使数据膨胀 1/3,比如 2560 膨胀至 3413,再加上其它 headers,应该比较接近 4096,印象中有的 Web 软件默认最多接 4k,所以 2560 就好,不建议乱填更大的值
这个 PR 将 WebSocket hub.go MaxHeaderBytes 扩至了 8196,战未来(以前 #421 顺便将它扩至了 4096,正好能应对新情况)