mirror of
https://github.com/valyala/fasthttp.git
synced 2026-06-14 15:56:44 +03:00
Do not compress already compressed response in CompressHandler
This commit is contained in:
@@ -330,6 +330,12 @@ func CompressHandler(h RequestHandler) RequestHandler {
|
||||
func CompressHandlerLevel(h RequestHandler, level int) RequestHandler {
|
||||
return func(ctx *RequestCtx) {
|
||||
h(ctx)
|
||||
ce := ctx.Response.Header.PeekBytes(strContentEncoding)
|
||||
if len(ce) > 0 {
|
||||
// Do not compress responses with non-empty
|
||||
// Content-Encoding.
|
||||
return
|
||||
}
|
||||
if ctx.Request.Header.HasAcceptEncodingBytes(strGzip) {
|
||||
ctx.Response.gzipBody(level)
|
||||
} else if ctx.Request.Header.HasAcceptEncodingBytes(strDeflate) {
|
||||
|
||||
@@ -1145,6 +1145,29 @@ func TestCompressHandler(t *testing.T) {
|
||||
t.Fatalf("unexpected body %q. Expecting %q", body, expectedBody)
|
||||
}
|
||||
|
||||
// an attempt to compress already compressed response
|
||||
ctx.Request.Reset()
|
||||
ctx.Response.Reset()
|
||||
ctx.Request.Header.Set("Accept-Encoding", "gzip, deflate, sdhc")
|
||||
hh := CompressHandler(h)
|
||||
hh(&ctx)
|
||||
s = ctx.Response.String()
|
||||
br = bufio.NewReader(bytes.NewBufferString(s))
|
||||
if err := resp.Read(br); err != nil {
|
||||
t.Fatalf("unexpected error: %s", err)
|
||||
}
|
||||
ce = resp.Header.Peek("Content-Encoding")
|
||||
if string(ce) != "gzip" {
|
||||
t.Fatalf("unexpected Content-Encoding: %q. Expecting %q", ce, "gzip")
|
||||
}
|
||||
body, err = resp.BodyGunzip()
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %s", err)
|
||||
}
|
||||
if string(body) != expectedBody {
|
||||
t.Fatalf("unexpected body %q. Expecting %q", body, expectedBody)
|
||||
}
|
||||
|
||||
// verify deflate-compressed response
|
||||
ctx.Request.Reset()
|
||||
ctx.Response.Reset()
|
||||
|
||||
Reference in New Issue
Block a user