mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-26 13:43:47 +03:00
encode: Default to order the formats are enabled for prefer
in Caddyfile (#4151)
This commit is contained in:
parent
61642b766b
commit
77764714ad
2 changed files with 70 additions and 1 deletions
|
@ -1,5 +1,6 @@
|
|||
:80
|
||||
|
||||
# All the options
|
||||
encode gzip zstd {
|
||||
minimum_length 256
|
||||
prefer zstd gzip
|
||||
|
@ -14,6 +15,20 @@ encode gzip zstd {
|
|||
header Content-Type image/svg+xml*
|
||||
}
|
||||
}
|
||||
|
||||
# Prefer list is implied (short way)
|
||||
encode gzip zstd
|
||||
|
||||
# Prefer list is implied (long way)
|
||||
encode {
|
||||
gzip 5
|
||||
zstd
|
||||
}
|
||||
|
||||
# Prefer list is turned off
|
||||
encode gzip zstd {
|
||||
prefer off
|
||||
}
|
||||
----------
|
||||
{
|
||||
"apps": {
|
||||
|
@ -55,6 +70,37 @@ encode gzip zstd {
|
|||
"zstd",
|
||||
"gzip"
|
||||
]
|
||||
},
|
||||
{
|
||||
"encodings": {
|
||||
"gzip": {},
|
||||
"zstd": {}
|
||||
},
|
||||
"handler": "encode",
|
||||
"prefer": [
|
||||
"gzip",
|
||||
"zstd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"encodings": {
|
||||
"gzip": {
|
||||
"level": 5
|
||||
},
|
||||
"zstd": {}
|
||||
},
|
||||
"handler": "encode",
|
||||
"prefer": [
|
||||
"gzip",
|
||||
"zstd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"encodings": {
|
||||
"gzip": {},
|
||||
"zstd": {}
|
||||
},
|
||||
"handler": "encode"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error)
|
|||
// gzip [<level>]
|
||||
// zstd
|
||||
// minimum_length <length>
|
||||
// prefer <formats...>
|
||||
// prefer off|<formats...>
|
||||
// # response matcher block
|
||||
// match {
|
||||
// status <code...>
|
||||
|
@ -55,7 +55,11 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error)
|
|||
//
|
||||
// Specifying the formats on the first line will use those formats' defaults.
|
||||
func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
||||
var preferDefaults []string
|
||||
var preferOff bool
|
||||
|
||||
responseMatchers := make(map[string]caddyhttp.ResponseMatcher)
|
||||
|
||||
for d.Next() {
|
||||
for _, arg := range d.RemainingArgs() {
|
||||
mod, err := caddy.GetModule("http.encoders." + arg)
|
||||
|
@ -70,6 +74,7 @@ func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
|||
enc.EncodingsRaw = make(caddy.ModuleMap)
|
||||
}
|
||||
enc.EncodingsRaw[arg] = caddyconfig.JSON(encoding, nil)
|
||||
preferDefaults = append(preferDefaults, arg)
|
||||
}
|
||||
|
||||
for d.NextBlock(0) {
|
||||
|
@ -86,6 +91,11 @@ func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
|||
case "prefer":
|
||||
var encs []string
|
||||
for d.NextArg() {
|
||||
// if one of the values is "off", then
|
||||
// we'll skip setting the prefer list.
|
||||
if d.Val() == "off" {
|
||||
preferOff = true
|
||||
}
|
||||
encs = append(encs, d.Val())
|
||||
}
|
||||
if len(encs) == 0 {
|
||||
|
@ -114,10 +124,23 @@ func (enc *Encode) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
|||
enc.EncodingsRaw = make(caddy.ModuleMap)
|
||||
}
|
||||
enc.EncodingsRaw[name] = caddyconfig.JSON(encoding, nil)
|
||||
preferDefaults = append(preferDefaults, name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if the "prefer" subdirective wasn't specified, use
|
||||
// the order in which the encoders were defined.
|
||||
if len(enc.Prefer) == 0 {
|
||||
enc.Prefer = preferDefaults
|
||||
}
|
||||
|
||||
// if "prefer off" was set, then we'll not use the default
|
||||
// behaviour of the order in which they were defined.
|
||||
if preferOff {
|
||||
enc.Prefer = nil
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue