From 4035ed308c0f81e4eaff4396b0950f5ab6995113 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Fri, 28 Aug 2020 06:21:26 +0300 Subject: [PATCH] fix https://github.com/kataras/iris/issues/1608 with the help of @AlbinoGeek for monitoring and together found the source of the problem --- _examples/mvc/authenticated-controller/main.go | 1 + aliases.go | 3 +++ context/compress.go | 12 ++++++++++++ core/router/api_builder.go | 1 + 4 files changed, 17 insertions(+) diff --git a/_examples/mvc/authenticated-controller/main.go b/_examples/mvc/authenticated-controller/main.go index f925ad30..730d0c52 100644 --- a/_examples/mvc/authenticated-controller/main.go +++ b/_examples/mvc/authenticated-controller/main.go @@ -16,6 +16,7 @@ import ( func main() { app := newApp() + // app.UseRouter(iris.Compression) app.Logger().SetLevel("debug") // Open a client, e.g. Postman and visit the below endpoints. diff --git a/aliases.go b/aliases.go index a4cf380a..dbc5ff18 100644 --- a/aliases.go +++ b/aliases.go @@ -238,6 +238,9 @@ func (p *prefixedDir) Open(name string) (http.File, error) { var ( // Compression is a middleware which enables // writing and reading using the best offered compression. + // Usage: + // app.Use (for matched routes) + // app.UseRouter (for both matched and 404s or other HTTP errors). Compression = func(ctx Context) { ctx.CompressWriter(true) ctx.CompressReader(true) diff --git a/context/compress.go b/context/compress.go index d8fc8cc3..8dd5938c 100644 --- a/context/compress.go +++ b/context/compress.go @@ -345,3 +345,15 @@ func (w *CompressResponseWriter) WriteTo(dest io.Writer, p []byte) (int, error) cw.Close() return n, err } + +// Reset implements the ResponseWriterReseter interface. +func (w *CompressResponseWriter) Reset() bool { + if w.Disabled { + // If it's disabled then the underline one is responsible. + rs, ok := w.ResponseWriter.(ResponseWriterReseter) + return ok && rs.Reset() + } + + w.CompressWriter.Reset(w.ResponseWriter) + return true +} diff --git a/core/router/api_builder.go b/core/router/api_builder.go index 5970f5ec..af0b7a5b 100644 --- a/core/router/api_builder.go +++ b/core/router/api_builder.go @@ -121,6 +121,7 @@ func (repo *repository) register(route *Route, rule RouteRegisterRule) (*Route, var defaultOverlapFilter = func(ctx *context.Context) bool { if ctx.IsStopped() { // It's stopped and the response can be overridden by a new handler. + // An exception of compress writer, which does not implement Reseter (and it shouldn't): rs, ok := ctx.ResponseWriter().(context.ResponseWriterReseter) return ok && rs.Reset() }