-
Notifications
You must be signed in to change notification settings - Fork 79
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
请问Exe版本是只支持HTTP/1.1吗? #202
Comments
根据标准,HTTP 代理的第一步是一个 CONNECT 请求,这一步只能是 HTTP/1.1 你可能在用 node.js? |
我确实在用node/deno,不过我说的降级是在浏览器上发现的,比如这个github.com和api.github.com,我直连的时候火狐的控制台里显示的是HTTP/2,但是开了代理后,就只剩下HTTP/1.1了 |
给客户端(浏览器)和远程服务器两边都发 ALPN: ['h2', 'http/1.1'] 就行了。 但你强行 h2 是可行的,只是可能需要手动给客户端(浏览器)和远程服务器两边都发 ALPN: ['h2'],c69c2f3 是对其中一边操作的例子 |
话说用node是不是可以直接构造一个没有SNI或者自定义SNI的TLS请求?这样也就不用再开代理来修改请求了 |
应该是可以的 |
你这个好像不行,我按你那个例子手动添加了那一行以后握手好像会失败 |
这个只是一边(给客户端的)的,服务端也加个 Lines 131 to 133 in bd88a93
但是要确认服务器是支持 h2 的,因为此时客户端(如果支持的话)已经协商好接下来用 h2 了,服务端要是协商成 http/1.1 就无法交流了。 |
手动设置那肯定会遇到不支持的,话说不能直接复制客户端和服务器返回的ALPN给对方么? |
理想的情况是客户端 client hello 后,server hello 前获取客户端的 ALPN 给远程服务器,然后跟远程协商好了 server hello 回给客户端。 |
我试了一下,确实是有问题,在sni_callback的时候用selected_alpn_protocol获取到的是空值,只有servername能获取 |
按照上面说的思路试了一下,可以实现转发客户端和服务器的ALPN,就是每次要多一次握手比较麻烦,写了个全局变量缓存了一下结果,这样就只有第一次访问的时候需要多握一次手了 |
HTTP/3 UDP 都没有 RST,也就不需要 Accesser 了 |
但是目前第一次访问还是要用TCP的吧,然后根据响应头才升级成HTTP/3 |
理论上 DNS SVCB/HTTPS 是这一协商问题的正统解决方案 |
通过DNS啊,不会又像ESNI那样直接被咔了吧 |
|
如果考虑到SVCB的话,是不是在DNS解析那一步就可以确定需要传递给客户端的alpn了,哦不对,这种一般都是h3网站,不需要代理了。 |
开启代理后,原来HTTP/2的链接都降级成HTTP/1.1了,用只支持HTTP/2的fetch会报错
The text was updated successfully, but these errors were encountered: