From bfc15136fd1e1408d70f6ab0b882ab784ea51125 Mon Sep 17 00:00:00 2001 From: Yavolte Date: Mon, 18 Aug 2025 10:17:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=94=AF=E6=8C=81=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=8E=8B=E7=BC=A9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- transport/http/server.go | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/transport/http/server.go b/transport/http/server.go index 8d2391e..7610ad5 100644 --- a/transport/http/server.go +++ b/transport/http/server.go @@ -27,16 +27,17 @@ import ( ) type Server struct { - ctx context.Context - opts *options - uri *url.URL - serve *http.Server - engine *gin.Engine - once sync.Once - listener net.Listener - fs *filesystem - middlewares []middleware.Middleware - Logger logger.Logger + ctx context.Context + opts *options + uri *url.URL + serve *http.Server + engine *gin.Engine + once sync.Once + listener net.Listener + fs *filesystem + middlewares []middleware.Middleware + Logger logger.Logger + autoCompress bool } func (s *Server) Endpoint(ctx context.Context) (string, error) { @@ -104,7 +105,8 @@ func (s *Server) Handle(method string, uri string, handler http.HandlerFunc) { }) } -func (s *Server) Webroot(prefix string, fs http.FileSystem) { +func (s *Server) Webroot(prefix string, authCompress bool, fs http.FileSystem) { + s.autoCompress = authCompress s.fs = newFS(time.Now(), fs) s.fs.SetPrefix(prefix) s.fs.DenyAccessDirectory() @@ -112,6 +114,9 @@ func (s *Server) Webroot(prefix string, fs http.FileSystem) { } func (s *Server) shouldCompress(req *http.Request) bool { + if !s.autoCompress { + return false + } if !strings.Contains(req.Header.Get(headerAcceptEncoding), "gzip") || strings.Contains(req.Header.Get("Connection"), "Upgrade") { return false @@ -165,6 +170,12 @@ func (s *Server) notFoundHandle(ctx *gin.Context) { if fp, err := s.fs.Open(uri); err == nil { s.staticHandle(ctx, fp) fp.Close() + } else { + //如果找到对应的压缩文件, 返回压缩文件 + if fp, err := s.fs.Open(uri + ".gz"); err == nil { + s.staticHandle(ctx, fp) + fp.Close() + } } } ctx.JSON(http.StatusNotFound, newResponse(errors.NotFound, "Not Found", nil))