summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--caddytest/integration/caddyfile_adapt/encode_options.txt46
-rw-r--r--modules/caddyhttp/encode/caddyfile.go25
2 files changed, 70 insertions, 1 deletions
diff --git a/caddytest/integration/caddyfile_adapt/encode_options.txt b/caddytest/integration/caddyfile_adapt/encode_options.txt
index a43c7e0..9459008 100644
--- a/caddytest/integration/caddyfile_adapt/encode_options.txt
+++ b/caddytest/integration/caddyfile_adapt/encode_options.txt
@@ -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"
}
]
}
diff --git a/modules/caddyhttp/encode/caddyfile.go b/modules/caddyhttp/encode/caddyfile.go
index b236520..d00a16a 100644
--- a/modules/caddyhttp/encode/caddyfile.go
+++ b/modules/caddyhttp/encode/caddyfile.go
@@ -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
}