fix https://github.com/kataras/iris/issues/1608 with the help of @AlbinoGeek for monitoring and together found the source of the problem

This commit is contained in:
Gerasimos (Makis) Maropoulos 2020-08-28 06:21:26 +03:00
parent a6ec94e1a6
commit 4035ed308c
No known key found for this signature in database
GPG Key ID: 5DBE766BD26A54E7
4 changed files with 17 additions and 0 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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
}

View File

@ -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()
}