From d605d8dc12380106e0703f9dc84ea1e8d8fd8d2e Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 18 Feb 2022 11:05:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E5=8E=8B=E7=BC=A9=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E4=B8=8D=E5=9C=A8Accept-Encoding=E4=B8=AD=E6=97=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=A7=A3=E5=8E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/nodes/http_request_reverse_proxy.go | 19 ----------------- internal/nodes/http_writer.go | 22 +++++++++++++++++--- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/internal/nodes/http_request_reverse_proxy.go b/internal/nodes/http_request_reverse_proxy.go index c4feeba..ccf0d56 100644 --- a/internal/nodes/http_request_reverse_proxy.go +++ b/internal/nodes/http_request_reverse_proxy.go @@ -5,7 +5,6 @@ import ( "errors" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" - "github.com/TeaOSLab/EdgeNode/internal/compressions" "github.com/TeaOSLab/EdgeNode/internal/remotelogs" "github.com/TeaOSLab/EdgeNode/internal/utils" "io" @@ -262,24 +261,6 @@ func (this *HTTPRequest) doReverseProxy() { } } - // 解压 - if !resp.Uncompressed { - var contentEncoding = resp.Header.Get("Content-Encoding") - if len(contentEncoding) > 0 && !httpAcceptEncoding(this.RawReq.Header.Get("Accept-Encoding"), contentEncoding) { - reader, err := compressions.NewReader(resp.Body, contentEncoding) - if err == nil { - var body = resp.Body - defer func() { - _ = body.Close() - }() - - resp.Body = reader - resp.Header.Del("Content-Encoding") - resp.Header.Del("Content-Length") - } - } - } - // 响应Header this.writer.AddHeaders(resp.Header) this.processResponseHeaders(resp.StatusCode) diff --git a/internal/nodes/http_writer.go b/internal/nodes/http_writer.go index eb9f036..209139d 100644 --- a/internal/nodes/http_writer.go +++ b/internal/nodes/http_writer.go @@ -328,12 +328,27 @@ func (this *HTTPWriter) PrepareWebP(resp *http.Response, size int64) { // PrepareCompression 准备压缩 func (this *HTTPWriter) PrepareCompression(resp *http.Response, size int64) { - if this.compressionConfig == nil || !this.compressionConfig.IsOn || this.compressionConfig.Level <= 0 { + var acceptEncodings = this.req.RawReq.Header.Get("Accept-Encoding") + var contentEncoding = this.Header().Get("Content-Encoding") + + if this.compressionConfig == nil || !this.compressionConfig.IsOn { + if lists.ContainsString([]string{"gzip", "deflate", "br"}, contentEncoding) && !httpAcceptEncoding(acceptEncodings, contentEncoding) { + reader, err := compressions.NewReader(resp.Body, contentEncoding) + if err != nil { + return + } + this.Header().Del("Content-Encoding") + this.Header().Del("Content-Length") + resp.Body = reader + } + return + } + + if this.compressionConfig.Level <= 0 { return } // 如果已经有编码则不处理 - var contentEncoding = this.rawWriter.Header().Get("Content-Encoding") if len(contentEncoding) > 0 && (!this.compressionConfig.DecompressData || !lists.ContainsString([]string{"gzip", "deflate", "br"}, contentEncoding)) { return } @@ -349,7 +364,7 @@ func (this *HTTPWriter) PrepareCompression(resp *http.Response, size int64) { } // 判断Accept是否支持压缩 - compressionType, compressionEncoding, ok := this.compressionConfig.MatchAcceptEncoding(this.req.RawReq.Header.Get("Accept-Encoding")) + compressionType, compressionEncoding, ok := this.compressionConfig.MatchAcceptEncoding(acceptEncodings) if !ok { return } @@ -369,6 +384,7 @@ func (this *HTTPWriter) PrepareCompression(resp *http.Response, size int64) { return } this.Header().Del("Content-Encoding") + this.Header().Del("Content-Length") resp.Body = reader }