ginuerzh / gost

GO Simple Tunnel - a simple tunnel written in golang
MIT License
15.57k stars 2.44k forks source link

gost sni 通用bug #737

Closed inits closed 2 years ago

inits commented 3 years ago

当tls发起连接的时候 gost才会获取的sni的名字,这样后面就用这个sni的名字请求目的网站, 但是 当用chrome firefox等浏览器,访问 gost设置的sni服务,浏览器网页一般嵌入非常多的 sni域名,(由于浏览器对gost的sni是长连接状态,就会导致 一部分访问返回200的状态码,但是却没有获取完整资源,我猜测是长连接状态,客户端没有 再次进行tls握手 发送sni ,导致gost路由出了问题, 客户端断开长连接,从新发起访问,就能正常获取资源) 就会导致 访问一些资源 出现返回200 但是无法加载,可以测试这个网站; https://ntdtv.com

注: 这种情况在 sniproxy以及 nginx里面都出现了,

wnark commented 2 years ago

大佬,确实有这个问题,尤其是GitHub上最突出。这个是http2.0的原因吗?有没有解决办法

inits commented 2 years ago

大佬,确实有这个问题,尤其是GitHub上最突出。这个是http2.0的原因吗?有没有解决办法

其实不是bug,这是浏览器机制导致的,你用wget 或者curl 进行访问没有问题,chrome firefox 所有浏览器访问都会有些问题,主要是https,所有访问域名 都走一个 ip, 导致以前访问域名和sniproxy是长连接,访问新的https域名也去连接这个 sniproxy的ip,就导致了 访问失败,你可以运行sniproxy到多个ip,为每个域名分配 一个没有使用的ip,就不会出错了