contrib
contrib copied to clipboard
Added support for compressed POST requests.
Updated tests and example. Added comments to satisfy golint.
Please close and don't merge #36 , this is the updated PR.
may this be a different middleware?
could be, because it uses different http headers. But I think it better encapsulates gzip library this way.
@bolshoy I may want to provide gzipped responses but I don't want to with requests. ok, how about this: same package but different middlewares.
also, I did some changes. Please, pull the last version! https://github.com/gin-gonic/contrib/blob/3c2269fb077feca1b0e6aa61cddfbe775b8230cb/gzip/gzip.go#L18-L36
@manucorporat different middlewares ok, but there's already a "gzip" folder, so either both of them in subfolders or two separate folders for request/reply gzip support.
you mean request/response, not "reply"
nah, same folder. KISS, just create a new .go file.
gin.Use(gzip.Compress(level)) // gzip responses
gin.Use(gzip.Decompress()) // requests
// gin.Use(gzip.Request()) // ??requests
or
// choose gzip or deflate (zlib in practice)
gin.Use(compress.Gzip(level)) // gzip responses
gin.Use(compress.Deflate(level)) // zlib responses
gin.Use(compress.Decompress()) // requests (gzip and deflate)
// gin.Use(compress.Request()) // ??requests (gzip and deflate)
or
gin.Use(compress.With(compress.Gzip, compress.Deflate)) // gzip has higher priority
gin.Use(compress.With(compress.Deflate, compress.Gzip)) // deflate has higher priority
gin.Use(compress.With(compress.Gzip)) // only gzip is supported
gin.Use(compress.Requests()) // uncompress requests
@mopemope
Also, we should consider to skip compression for already compressed formats. Here a list: gif, jpeg, png, avi, mov, mp3
@manucorporat
Here are some of the settings we need to consider (loosely based on http://httpd.apache.org/docs/2.2/mod/mod_deflate.html):
compress filters
- input
- output
compression format support
- gzip
- deflate
- bzip2, etc
additional compression settings (output only)
- compression level
- buf-size etc
- force-gzip (response always compressed)
- mime types to compress (default: text/html text/plain text/xml text/css text/javascript application/javascript application/json)
There should be some defaults in case no explicit settings are provided, but the full config may look like this:
inputOptions := map[string]interface{}{
"format": ["gzip", "deflate", "bzip2"],
}
outputOptions := map[string]interface{}{
"format": ["gzip", "deflate", "bzip2"],
"level": 8,
"buf-size": 8096,
"force": false,
"mime-types": ["text/html", "text/javascript", "application/javascript", "application/json"],
}
gin.Use(compress.InputFilter(inputOptions))
gin.Use(compress.OutputFilter(outputOptions))
@manucorporat we're working on an update for this branch right now to fit v1.0 changes, please don't merge yet. @bolshoy fyi
@manucorporat Separated input and output filters, added output options and mime type detection by URL extension.
:+1: yay!
please merge :)
@manucorporat maybe merge this? been some time
@manucorporat ping