Skip to content

Commit e599d60

Browse files
authored
fix: 修复 GZIP 压缩时响应体为空的问题 (#64)
1 parent cef00da commit e599d60

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

internal/handler/utils.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,11 @@ func updateBody(rw *http.Response, content []byte) error {
116116
switch encoding {
117117
case "gzip":
118118
logging.Debug("使用 GZIP 重新编码数据")
119-
gw := gzip.NewWriter(&compressed)
120-
defer gw.Close()
121-
writer = gw
119+
writer = gzip.NewWriter(&compressed)
122120

123121
case "br":
124122
logging.Debug("使用 Brotli 重新编码数据")
125-
bw := brotli.NewWriter(&compressed)
126-
defer bw.Close()
127-
writer = bw
123+
writer = brotli.NewWriter(&compressed)
128124

129125
case "": // 无压缩
130126
logging.Debug("无压缩数据")
@@ -133,16 +129,21 @@ func updateBody(rw *http.Response, content []byte) error {
133129
default:
134130
logging.Warningf("不支持的重新编码:%s,将不对数据进行压缩编码", encoding)
135131
rw.Header.Del("Content-Encoding")
132+
writer = &compressed
136133
}
137134

138135
if _, err := writer.Write(content); err != nil {
139136
return fmt.Errorf("compression write error: %w", err)
140137
}
141138

142-
// Brotli 需要显式 Flush
143-
if bw, ok := writer.(*brotli.Writer); ok {
144-
if err := bw.Flush(); err != nil {
145-
return err
139+
// 显式关闭以确保数据完整写入 buffer
140+
if gw, ok := writer.(*gzip.Writer); ok {
141+
if err := gw.Close(); err != nil {
142+
return fmt.Errorf("gzip close error: %w", err)
143+
}
144+
} else if bw, ok := writer.(*brotli.Writer); ok {
145+
if err := bw.Close(); err != nil {
146+
return fmt.Errorf("brotli close error: %w", err)
146147
}
147148
}
148149

0 commit comments

Comments
 (0)