diff --git a/CHANGELOG.md b/CHANGELOG.md index 019844d..b6bec5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,21 +1,5 @@ # 更新日志 -3.5.6 - 2025-06-15 ---- -- FIX: 修正blob重写的生成问题 -- CHANGE: 改进302重定向逻辑 - -25w48c - 2025-06-15 ---- -- PRE-RELEASE: 此版本是v3.5.6预发布版本,请勿在生产环境中使用; -- CHANGE: 加入内部301处理 - -25w48b - 2025-06-15 ---- -- PRE-RELEASE: 此版本是v3.5.6预发布版本,请勿在生产环境中使用; -- FIX: 修正blob重写的生成问题 -- CHANGE: 验证与连接释放相关的修正 - 25w48a - 2025-06-14 --- - PRE-RELEASE: 此版本是v3.5.6预发布版本,请勿在生产环境中使用; diff --git a/DEV-VERSION b/DEV-VERSION index b100103..219b720 100644 --- a/DEV-VERSION +++ b/DEV-VERSION @@ -1 +1 @@ -25w48c \ No newline at end of file +25w48a \ No newline at end of file diff --git a/VERSION b/VERSION index 01081db..1947319 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.5.6 \ No newline at end of file +3.5.5 \ No newline at end of file diff --git a/config/config.go b/config/config.go index 5c5023a..0060b63 100644 --- a/config/config.go +++ b/config/config.go @@ -26,7 +26,6 @@ type Config struct { host = "0.0.0.0" port = 8080 netlib = "netpoll" # "netpoll" / "std" "standard" "net/http" "net" -goPoolSize = 1024 sizeLimit = 125 # MB memLimit = 0 # MB H2C = true @@ -39,7 +38,6 @@ type ServerConfig struct { Host string `toml:"host"` NetLib string `toml:"netlib"` SenseClientDisconnection bool `toml:"senseClientDisconnection"` - GoPoolSize int `toml:"goPoolSize"` SizeLimit int `toml:"sizeLimit"` MemLimit int64 `toml:"memLimit"` H2C bool `toml:"H2C"` @@ -226,15 +224,14 @@ func FileExists(filename string) bool { func DefaultConfig() *Config { return &Config{ Server: ServerConfig{ - Port: 8080, - Host: "0.0.0.0", - NetLib: "netpoll", - GoPoolSize: 1024, - SizeLimit: 125, - MemLimit: 0, - H2C: true, - Cors: "*", - Debug: false, + Port: 8080, + Host: "0.0.0.0", + NetLib: "netpoll", + SizeLimit: 125, + MemLimit: 0, + H2C: true, + Cors: "*", + Debug: false, }, Httpc: HttpcConfig{ Mode: "auto", diff --git a/config/config.toml b/config/config.toml index b60cb13..9ef2662 100644 --- a/config/config.toml +++ b/config/config.toml @@ -3,7 +3,6 @@ host = "0.0.0.0" port = 8080 netlib = "netpoll" # "netpoll" / "std" "standard" "net/http" "net" senseClientDisconnection = false -goPoolSize = 1024 sizeLimit = 125 # MB memLimit = 0 # MB H2C = true diff --git a/go.mod b/go.mod index b606255..ba6d974 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/BurntSushi/toml v1.5.0 github.com/WJQSERVER-STUDIO/httpc v0.7.0 github.com/WJQSERVER-STUDIO/logger v1.8.0 - github.com/cloudwego/hertz v0.10.1-0.20250611091639-3dde619f5598 + github.com/cloudwego/hertz v0.10.0 github.com/hertz-contrib/http2 v0.1.8 golang.org/x/net v0.41.0 golang.org/x/time v0.12.0 @@ -44,3 +44,6 @@ require ( ) replace github.com/nyaruka/phonenumbers => github.com/nyaruka/phonenumbers v1.6.1 // 1.6.3 has reflect leaking + +//replace github.com/WJQSERVER-STUDIO/httpc v0.5.1 => /data/github/WJQSERVER-STUDIO/httpc +//replace github.com/WJQSERVER-STUDIO/logger v1.6.0 => /data/github/WJQSERVER-STUDIO/logger diff --git a/go.sum b/go.sum index 730d2c6..d8d7e39 100644 --- a/go.sum +++ b/go.sum @@ -24,8 +24,8 @@ github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCy github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/gopkg v0.1.4 h1:EoQiCG4sTonTPHxOGE0VlQs+sQR+Hsi2uN0qqwu8O50= github.com/cloudwego/gopkg v0.1.4/go.mod h1:FQuXsRWRsSqJLsMVd5SYzp8/Z1y5gXKnVvRrWUOsCMI= -github.com/cloudwego/hertz v0.10.1-0.20250611091639-3dde619f5598 h1:8tVol3hNJS7+7f7yQIkP57tZMzUV3fOhn6pQ7t4R06k= -github.com/cloudwego/hertz v0.10.1-0.20250611091639-3dde619f5598/go.mod h1:lRBohmcDkGx5TLK6QKFGdzJ6n3IXqGueHsOiXcYgXA4= +github.com/cloudwego/hertz v0.10.0 h1:V0vmBaLdQPlgL6w2TA6PZL1g6SGgQznFx6vqxWdCcKw= +github.com/cloudwego/hertz v0.10.0/go.mod h1:lRBohmcDkGx5TLK6QKFGdzJ6n3IXqGueHsOiXcYgXA4= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cloudwego/netpoll v0.7.0 h1:bDrxQaNfijRI1zyGgXHQoE/nYegL0nr+ijO1Norelc4= github.com/cloudwego/netpoll v0.7.0/go.mod h1:PI+YrmyS7cIr0+SD4seJz3Eo3ckkXdu2ZVKBLhURLNU= diff --git a/main.go b/main.go index a31f075..7d6fb0e 100644 --- a/main.go +++ b/main.go @@ -431,7 +431,6 @@ func main() { server.WithHostPorts(addr), server.WithTransport(standard.NewTransporter), server.WithStreamBody(true), - server.WithIdleTimeout(30*time.Second), ) r.AddProtocol("h2", factory.NewServerFactory()) } else { @@ -439,7 +438,6 @@ func main() { server.WithHostPorts(addr), server.WithTransport(standard.NewTransporter), server.WithStreamBody(true), - server.WithIdleTimeout(30*time.Second), ) } } else if cfg.Server.NetLib == "netpoll" || cfg.Server.NetLib == "" { @@ -449,7 +447,6 @@ func main() { server.WithHostPorts(addr), server.WithSenseClientDisconnection(cfg.Server.SenseClientDisconnection), server.WithStreamBody(true), - server.WithIdleTimeout(30*time.Second), ) r.AddProtocol("h2", factory.NewServerFactory()) } else { @@ -457,7 +454,6 @@ func main() { server.WithHostPorts(addr), server.WithSenseClientDisconnection(cfg.Server.SenseClientDisconnection), server.WithStreamBody(true), - server.WithIdleTimeout(30*time.Second), ) } } else { @@ -466,14 +462,6 @@ func main() { os.Exit(1) } - /* - if cfg.Server.GoPoolSize > 0 { - gopool.SetCap(int32(cfg.Server.GoPoolSize)) - } else { - gopool.SetCap(1024) - } - */ - r.Use(recovery.Recovery()) // Recovery中间件 r.Use(loggin.Middleware()) // log中间件 r.Use(viaHeader()) diff --git a/proxy/chunkreq.go b/proxy/chunkreq.go index 124cfb7..287da4c 100644 --- a/proxy/chunkreq.go +++ b/proxy/chunkreq.go @@ -28,7 +28,6 @@ func ChunkedProxyRequest(ctx context.Context, c *app.RequestContext, u string, c logError("Failed to close response body: %v", err) } } - c.Abort() }() rb := client.NewRequestBuilder(string(c.Request.Method()), u) @@ -59,7 +58,7 @@ func ChunkedProxyRequest(ctx context.Context, c *app.RequestContext, u string, c } // 处理302情况 - if resp.StatusCode == 302 || resp.StatusCode == 301 { + if resp.StatusCode == 302 { finalURL := resp.Header.Get("Location") if finalURL != "" { err = resp.Body.Close() @@ -153,7 +152,6 @@ func ChunkedProxyRequest(ctx context.Context, c *app.RequestContext, u string, c return } c.SetBodyStream(bodyReader, -1) - bodyReader.Close() } } diff --git a/proxy/gitreq.go b/proxy/gitreq.go index 6d00640..de6bff7 100644 --- a/proxy/gitreq.go +++ b/proxy/gitreq.go @@ -144,5 +144,4 @@ func GitReq(ctx context.Context, c *app.RequestContext, u string, cfg *config.Co } c.SetBodyStream(bodyReader, -1) - bodyReader.Close() } diff --git a/proxy/reqheader.go b/proxy/reqheader.go index 8612a7e..8400821 100644 --- a/proxy/reqheader.go +++ b/proxy/reqheader.go @@ -49,16 +49,6 @@ var ( } ) -// copyHeader 将所有头部从 src 复制到 dst。 -// 对于多值头部,它会为每个值调用 Add,从而保留所有值。 -func copyHeader(dst, src http.Header) { - for k, vv := range src { - for _, v := range vv { - dst.Add(k, v) - } - } -} - func setRequestHeaders(c *app.RequestContext, req *http.Request, cfg *config.Config, matcher string) { if matcher == "raw" && cfg.Httpc.UseCustomRawHeaders { // 使用预定义Header @@ -66,23 +56,20 @@ func setRequestHeaders(c *app.RequestContext, req *http.Request, cfg *config.Con req.Header.Set(key, value) } } else if matcher == "clone" { - c.Request.Header.VisitAll(func(key, value []byte) { headerKey := string(key) headerValue := string(value) - req.Header.Set(headerKey, headerValue) + if _, shouldRemove := cloneHeadersToRemove[headerKey]; !shouldRemove { + req.Header.Set(headerKey, headerValue) + } }) - for key := range cloneHeadersToRemove { - req.Header.Del(key) - } } else { c.Request.Header.VisitAll(func(key, value []byte) { headerKey := string(key) headerValue := string(value) - req.Header.Set(headerKey, headerValue) + if _, shouldRemove := reqHeadersToRemove[headerKey]; !shouldRemove { + req.Header.Set(headerKey, headerValue) + } }) - for key := range reqHeadersToRemove { - req.Header.Del(key) - } } }