-
Notifications
You must be signed in to change notification settings - Fork 9k
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
[Feature Request][上游 Golang 已有实现][issue 重开] 允许HTTP/2使用明文传输 #1644
Comments
提出这个问题是因为我用 caddy 做 HTTP/2 反代已有半年之久了。注意到流量在 caddy 端解密以后重新加密发给后端的 V2ray 时性能损失很大。 |
是什么意思?你指谁的加密? |
开发者你好,感谢花时间阅读我的 issue。我拿实际的一段 Caddyfile 做例子解释好了:
在上面这段配置中,服务 |
这个 feature 可以说是急需的,特别是对于使用云服务的负载均衡器(Azure 或者 Google cloud)以及 CDN 的用户,因为负载均衡器和 CDN 是可以直接接管证书和 TSL 甚至 HTTP/2 、 QUIC 的,所以希望在客户端也能够支持像浏览器一样自动协商底层传输协议是 http1.1 还是 HTTP/2 QUIC 。相当于提供一个尽量简单、不占资源的 HTTP 类型的底层传输协议,再由客户端自动协商去负载均衡器的壳。 |
|
的确,谷歌云的负载平衡器除了第 7 层 HTTP(S) 负载平衡之外还有第 4 层 TCP 负载平衡可用于支持 WebSocket 传输方式;以及第 4 层 UDP 负载平衡可用于支持 QUIC 传输方式,然而其灵活性会大打折扣,无法像 chrome 那样跟据网络条件在 TCP/UDP 之间自动切换。
并且我现在搞不明白 v2ray 客户端究竟是否支持 WebSocket2 over HTTP/2 ,在连接可用时尝试升级。 |
不知道 chrome 的 Network Stack 有没有像 V8 一样分离出来可以被调用?如果可以的话那网络传输协议的混淆就完美了。 |
楼上的朋友们你们偏题的有点过了。和本 Issue 无关的话题希望能另开 Issue 来讨论。 |
@IceCodeNew 就算v2ray支持h2c,caddy目前还是不支持h2c proxy |
@ekenchan 楼上这位朋友,前端作反代的为什么一定要是 Caddy 呢?我现在选择 Caddy 不过是因为只有 Caddy 才支持 HTTP/2 反代而已。 |
@IceCodeNew 我尝试过修改v2ray.com/core/transport/http/hub.go让它支持h2c,目前只有haproxy的tcp mode能够工作,在http mode下会退化成http/1.1请求后端的v2ray,这样就不能够通过path做分流。apache2还没试。 |
@IceCodeNew apache2的mod_proxy_http2转发h2c不能够工作,但nghttpx可以。如我所说,只要修改v2ray.com/core/transport/http/hub.go就可以,在没有配置tls的情况下,创建一个h2c server处理请求就可以,应该可以达到你的要求。 |
下载文件也走的代理? |
@kxmp 这个不是 TCP 拥塞控制的问题谢谢。 |
@ekenchan 感谢测试,我其实提这个 issue 的时候就是打的 HAProxy 的算盘,nghttpx 不在考虑范围内。 |
目前短时间内没有人来做这个事情,欢迎你提交PR |
你下文件如果走的代理 然后代理速度卡了 就是通道内的网络堵塞了. |
@kxmp 老哥你真的理清楚了我这个场景的流程么…… |
v2自己的加密是当前H2模式要求的 ws没这要求. 如果你说web还能再 重新加密 然后发给v2 我说的通道是你代理有没有走v2. @Leo-Mu ws可以走h2的 我测试就开的h2的服务器. 但是有没有自动降级我就不清楚了. ws开了的话就必须加upgrade头 否则还连不上了. |
我们还是都不要脑补了,你和我不在一个频道上。
我下载文件和访问 YouTube 都是走的同一个代理。不然我就不会以下载文件的时候 YouTube 卡到无法加载来实际说明我对性能问题的体验了。 |
我从来没说v2客户端到v2服务器是明文 可能我没描述明确 我只是想说web是不会重加密的. 我要说的说完了 你不信就算了. 你这个东西是你的事情啊 我又没用过caddy |
没错,确实是这样。但我是怕你懒得去看抓包的内容所以想用一个实际跑得起来的 caddyfile 配置给你一个简单的证明,说明从 caddy 到 v2ray 服务端的内容是加了密的。
都说了你和我不在一个频道上了,你看的始终是 v2ray 客户端 -> v2ray 服务端这样从起点直接飞到终点的路线,而我现在讨论的问题是路上的某一个具体环节(服务器端的从本地到本地,从 caddy 到 v2ray 的环节)
就说了我这里是配通了的……你怎么又开始觉得我连代理都连不上了。 |
已知:
由 1&2 我们知道 caddy 自己一定要解开了 tls 以后才能看到原本的 HTTP2 流量到底想要访问什么 path
—— v2ray 不认明文的 HTTP 流量欸,好奇怪哦(棒读
[1]. 圣经·《白话文配置指南》 |
对不起 你要是再配置加密 那就加密三次了 XD 你客户端的请求就是原封不动的数据 这个就是tls (那是属于你v2ray发出去的流量 然后另一个又是浏览器的流量 你肯定搞不清楚这2个. 浏览器的包裹在web tls里面 v2ray的包裹在前面web tls里面) 浏览器自己的那个tls请求不算v2的 因为谁都可以访问web服务器. 反正你的115.2那个ip要是你的浏览器ip的话 你问题大了
你的疑问 为什么加密后的path web能读取. |
@Leo-Mu 跑个题 2019-05-20 12:48:19 |
你这个问题跟我双图刷新 第二个打不开很相似. 我也没法证明哪里有问题 我当初用奸商的服务器测试了下发现这样. 你用多路复用了么 用了的话关了试试. 2019-05-20 12:58:47 但是你真认为这地方有问题的话. 那里面的流量直接就是v2客户端对v2服务器的. 这个地方其他人好像都没问题呢. |
@IceCodeNew 你可以参考这种改法,写得不完美,只是示意 |
@ekenchan 嗯,谢谢啦。 |
你是猴子请来的逗比吧,我抓包的流量都是过滤器筛下来的正常通信的流量,谁让你脑补那是 v2ray 无法解析的数据了。 |
你看看你说的这句话:
你觉得你说的是人话?我凭什么来理解你和我打的禅机??? 不然我们再来分析一个句子好了:
我们把括号注解丢掉来读一读短句啊:“你客户端的请求就是原封不动的数据 这个就是tls浏览器自己的那个tls”
再来看后半句的”这个“,我姑且是以中文为母语的人,我判断这个“这个”似乎指代前半句的”原封不动的数据“、”客户端的请求“,那么我们就把这个指代关系带入后半句来看:
我请你说人话好吗? |
web 服务器并不需要一来就看清楚 url 的全貌,因为 http 报文里面有 SNI 这个字段,所以在前期的处理阶段里 web 服务器不需要知道 path,只要看 sni 就行了。 |
感谢 @lucifer9 @xiaokangwang 等开发者的工作! 我在 v2ray/discussion 库下面新开了一个 issue #296,希望和所有关注这个问题的朋友们探讨如何调整 v2ray 和反向代理的配置来支持 h2c。 |
如题,希望 V2ray 的开发人员能重新考虑,把允许 HTTP/2 使用明文传输加到 TODO list 上。
之前已有同样的 issue,但是那个 issue 提得比较早,开发者以上游 Golang 还没有相关实现这个原因关闭了那个 issue。
现在我重新把 #975 这个 issue 打开,是因为 Golang 18 年合并的一个 CL 里已经实现了 h2c。
The text was updated successfully, but these errors were encountered: