Compare commits
No commits in common. "main" and "v0.1.0" have entirely different histories.
2 changed files with 17 additions and 10 deletions
|
@ -8,6 +8,10 @@ import (
|
||||||
func main() {
|
func main() {
|
||||||
router := gin.Default()
|
router := gin.Default()
|
||||||
|
|
||||||
|
options := ginzip.DefaultOptions()
|
||||||
|
options.BrotliLevel = ""
|
||||||
|
options.GzipLevel = ""
|
||||||
|
|
||||||
ui := router.Group("/", ginzip.New(ginzip.DefaultOptions()))
|
ui := router.Group("/", ginzip.New(ginzip.DefaultOptions()))
|
||||||
ui.GET("/", getTestHandler("Hello World (should be compressed)"))
|
ui.GET("/", getTestHandler("Hello World (should be compressed)"))
|
||||||
|
|
||||||
|
|
23
ginzip.go
23
ginzip.go
|
@ -33,7 +33,7 @@ type intOptions struct {
|
||||||
GzipLevel int
|
GzipLevel int
|
||||||
BrotliEn bool
|
BrotliEn bool
|
||||||
BrotliLevel int
|
BrotliLevel int
|
||||||
SkipExtensions map[string]bool
|
SkipExtensions []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new Ginzip middleware function.
|
// New creates a new Ginzip middleware function.
|
||||||
|
@ -136,7 +136,16 @@ func (b *brotliWriter) Encoding() string {
|
||||||
return "br"
|
return "br"
|
||||||
}
|
}
|
||||||
|
|
||||||
func shouldCompress(req *http.Request, skipExtensions map[string]bool) bool {
|
func containsString(s []string, e string) bool {
|
||||||
|
for _, a := range s {
|
||||||
|
if a == e {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func shouldCompress(req *http.Request, skipExtensions []string) bool {
|
||||||
// Dont compress websocket connections
|
// Dont compress websocket connections
|
||||||
if strings.Contains(req.Header.Get("Connection"), "Upgrade") ||
|
if strings.Contains(req.Header.Get("Connection"), "Upgrade") ||
|
||||||
strings.Contains(req.Header.Get("Content-Type"), "text/event-stream") {
|
strings.Contains(req.Header.Get("Content-Type"), "text/event-stream") {
|
||||||
|
@ -148,8 +157,7 @@ func shouldCompress(req *http.Request, skipExtensions map[string]bool) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
_, doSkip := skipExtensions[extension]
|
return !containsString(skipExtensions, extension)
|
||||||
return !doSkip
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseLevel(level string, dfault int, min int, max int) (int, bool) {
|
func parseLevel(level string, dfault int, min int, max int) (int, bool) {
|
||||||
|
@ -185,17 +193,12 @@ func parseOptions(options Options) intOptions {
|
||||||
brotli.DefaultCompression, brotli.BestSpeed, brotli.BestCompression,
|
brotli.DefaultCompression, brotli.BestSpeed, brotli.BestCompression,
|
||||||
)
|
)
|
||||||
|
|
||||||
exts := map[string]bool{}
|
|
||||||
for _, ext := range options.SkipExtensions {
|
|
||||||
exts[ext] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
return intOptions{
|
return intOptions{
|
||||||
GzipEn: gzipEn,
|
GzipEn: gzipEn,
|
||||||
GzipLevel: gzipLvl,
|
GzipLevel: gzipLvl,
|
||||||
BrotliEn: brEn,
|
BrotliEn: brEn,
|
||||||
BrotliLevel: brLvl,
|
BrotliLevel: brLvl,
|
||||||
SkipExtensions: exts,
|
SkipExtensions: options.SkipExtensions,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue