优化代码

This commit is contained in:
刘祥超
2024-01-15 10:31:42 +08:00
parent 196f0612dc
commit 84e61f7765
2 changed files with 42 additions and 13 deletions

View File

@@ -6,6 +6,7 @@ import (
"errors" "errors"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"io" "io"
"net/http"
) )
type ContentEncoding = string type ContentEncoding = string
@@ -58,3 +59,32 @@ func NewWriter(writer io.Writer, compressType serverconfigs.HTTPCompressionType,
} }
return nil, errors.New("invalid compression type '" + compressType + "'") return nil, errors.New("invalid compression type '" + compressType + "'")
} }
// SupportEncoding 检查是否支持某个编码
func SupportEncoding(encoding string) bool {
return encoding == ContentEncodingBr ||
encoding == ContentEncodingGzip ||
encoding == ContentEncodingDeflate ||
encoding == ContentEncodingZSTD
}
// WrapHTTPResponse 包装http.Response对象
func WrapHTTPResponse(resp *http.Response) {
if resp == nil {
return
}
var contentEncoding = resp.Header.Get("Content-Encoding")
if len(contentEncoding) == 0 || !SupportEncoding(contentEncoding) {
return
}
reader, err := NewReader(resp.Body, contentEncoding)
if err != nil {
// unable to decode, we ignore the error
return
}
resp.Header.Del("Content-Encoding")
resp.Header.Del("Content-Length")
resp.Body = reader
}

View File

@@ -18,7 +18,6 @@ import (
setutils "github.com/TeaOSLab/EdgeNode/internal/utils/sets" setutils "github.com/TeaOSLab/EdgeNode/internal/utils/sets"
"github.com/TeaOSLab/EdgeNode/internal/utils/writers" "github.com/TeaOSLab/EdgeNode/internal/utils/writers"
_ "github.com/biessek/golang-ico" _ "github.com/biessek/golang-ico"
"github.com/iwind/TeaGo/lists"
"github.com/iwind/TeaGo/types" "github.com/iwind/TeaGo/types"
"github.com/iwind/gowebp" "github.com/iwind/gowebp"
_ "golang.org/x/image/bmp" _ "golang.org/x/image/bmp"
@@ -564,8 +563,8 @@ func (this *HTTPWriter) PrepareWebP(resp *http.Response, size int64) {
} }
var contentEncoding = this.GetHeader("Content-Encoding") var contentEncoding = this.GetHeader("Content-Encoding")
switch contentEncoding { if len(contentEncoding) > 0 {
case "gzip", "deflate", "br", "zstd": if compressions.SupportEncoding(contentEncoding) {
reader, err := compressions.NewReader(resp.Body, contentEncoding) reader, err := compressions.NewReader(resp.Body, contentEncoding)
if err != nil { if err != nil {
return return
@@ -573,10 +572,10 @@ func (this *HTTPWriter) PrepareWebP(resp *http.Response, size int64) {
this.Header().Del("Content-Encoding") this.Header().Del("Content-Encoding")
this.Header().Del("Content-Length") this.Header().Del("Content-Length")
this.rawReader = reader this.rawReader = reader
case "": // 空 } else {
default:
return return
} }
}
this.webpOriginContentType = contentType this.webpOriginContentType = contentType
this.webpIsEncoding = true this.webpIsEncoding = true
@@ -603,7 +602,7 @@ func (this *HTTPWriter) PrepareCompression(resp *http.Response, size int64) {
var contentEncoding = this.GetHeader("Content-Encoding") var contentEncoding = this.GetHeader("Content-Encoding")
if this.compressionConfig == nil || !this.compressionConfig.IsOn { if this.compressionConfig == nil || !this.compressionConfig.IsOn {
if lists.ContainsString([]string{"gzip", "deflate", "br", "zstd"}, contentEncoding) && !httpAcceptEncoding(acceptEncodings, contentEncoding) { if compressions.SupportEncoding(contentEncoding) && !httpAcceptEncoding(acceptEncodings, contentEncoding) {
reader, err := compressions.NewReader(resp.Body, contentEncoding) reader, err := compressions.NewReader(resp.Body, contentEncoding)
if err != nil { if err != nil {
return return
@@ -625,7 +624,7 @@ func (this *HTTPWriter) PrepareCompression(resp *http.Response, size int64) {
} }
// 如果已经有编码则不处理 // 如果已经有编码则不处理
if len(contentEncoding) > 0 && (!this.compressionConfig.DecompressData || !lists.ContainsString([]string{"gzip", "deflate", "br", "zstd"}, contentEncoding)) { if len(contentEncoding) > 0 && (!this.compressionConfig.DecompressData || !compressions.SupportEncoding(contentEncoding)) {
return return
} }