Browse Source
* encode: implement prefer setting * encode: minimum_length configurable via caddyfile * encode: configurable content-types which to encode * file_server: support precompressed files * encode: use ReponseMatcher for conditional encoding of content * linting error & documentation of encode.PrecompressedOrder * encode: allow just one response matcher also change the namespace of the encoders back, I accidently changed to precompressed >.> default matchers include a * to match to any charset, that may be appended * rounding of the PR * added integration tests for new caddyfile directives * improved various doc strings (punctuation and typos) * added json tag for file_server precompress order and encode matcher * file_server: add vary header, remove accept-ranges when serving precompressed files * encode: move Suffix implementation to precompressed modulesmaster
Steffen Brüheim
4 years ago
committed by
GitHub
12 changed files with 768 additions and 49 deletions
@ -0,0 +1,66 @@ |
|||||
|
:80 |
||||
|
|
||||
|
encode gzip zstd { |
||||
|
minimum_length 256 |
||||
|
prefer zstd gzip |
||||
|
match { |
||||
|
status 2xx 4xx 500 |
||||
|
header Content-Type text/* |
||||
|
header Content-Type application/json* |
||||
|
header Content-Type application/javascript* |
||||
|
header Content-Type application/xhtml+xml* |
||||
|
header Content-Type application/atom+xml* |
||||
|
header Content-Type application/rss+xml* |
||||
|
header Content-Type image/svg+xml* |
||||
|
} |
||||
|
} |
||||
|
---------- |
||||
|
{ |
||||
|
"apps": { |
||||
|
"http": { |
||||
|
"servers": { |
||||
|
"srv0": { |
||||
|
"listen": [ |
||||
|
":80" |
||||
|
], |
||||
|
"routes": [ |
||||
|
{ |
||||
|
"handle": [ |
||||
|
{ |
||||
|
"encodings": { |
||||
|
"gzip": {}, |
||||
|
"zstd": {} |
||||
|
}, |
||||
|
"handler": "encode", |
||||
|
"match": { |
||||
|
"headers": { |
||||
|
"Content-Type": [ |
||||
|
"text/*", |
||||
|
"application/json*", |
||||
|
"application/javascript*", |
||||
|
"application/xhtml+xml*", |
||||
|
"application/atom+xml*", |
||||
|
"application/rss+xml*", |
||||
|
"image/svg+xml*" |
||||
|
] |
||||
|
}, |
||||
|
"status_code": [ |
||||
|
2, |
||||
|
4, |
||||
|
500 |
||||
|
] |
||||
|
}, |
||||
|
"minimum_length": 256, |
||||
|
"prefer": [ |
||||
|
"zstd", |
||||
|
"gzip" |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
:80 |
||||
|
|
||||
|
file_server { |
||||
|
precompressed zstd br gzip |
||||
|
} |
||||
|
---------- |
||||
|
{ |
||||
|
"apps": { |
||||
|
"http": { |
||||
|
"servers": { |
||||
|
"srv0": { |
||||
|
"listen": [ |
||||
|
":80" |
||||
|
], |
||||
|
"routes": [ |
||||
|
{ |
||||
|
"handle": [ |
||||
|
{ |
||||
|
"handler": "file_server", |
||||
|
"hide": [ |
||||
|
"./Caddyfile" |
||||
|
], |
||||
|
"precompressed": { |
||||
|
"br": {}, |
||||
|
"gzip": {}, |
||||
|
"zstd": {} |
||||
|
}, |
||||
|
"precompressed_order": [ |
||||
|
"zstd", |
||||
|
"br", |
||||
|
"gzip" |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
package caddybrotli |
||||
|
|
||||
|
import ( |
||||
|
"github.com/caddyserver/caddy/v2" |
||||
|
"github.com/caddyserver/caddy/v2/modules/caddyhttp/encode" |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
caddy.RegisterModule(BrotliPrecompressed{}) |
||||
|
} |
||||
|
|
||||
|
// BrotliPrecompressed provides the file extension for files precompressed with brotli encoding.
|
||||
|
type BrotliPrecompressed struct{} |
||||
|
|
||||
|
// CaddyModule returns the Caddy module information.
|
||||
|
func (BrotliPrecompressed) CaddyModule() caddy.ModuleInfo { |
||||
|
return caddy.ModuleInfo{ |
||||
|
ID: "http.precompressed.br", |
||||
|
New: func() caddy.Module { return new(BrotliPrecompressed) }, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// AcceptEncoding returns the name of the encoding as
|
||||
|
// used in the Accept-Encoding request headers.
|
||||
|
func (BrotliPrecompressed) AcceptEncoding() string { return "br" } |
||||
|
|
||||
|
// Suffix returns the filename suffix of precompressed files.
|
||||
|
func (BrotliPrecompressed) Suffix() string { return ".br" } |
||||
|
|
||||
|
// Interface guards
|
||||
|
var _ encode.Precompressed = (*BrotliPrecompressed)(nil) |
@ -0,0 +1,28 @@ |
|||||
|
package caddygzip |
||||
|
|
||||
|
import ( |
||||
|
"github.com/caddyserver/caddy/v2" |
||||
|
"github.com/caddyserver/caddy/v2/modules/caddyhttp/encode" |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
caddy.RegisterModule(GzipPrecompressed{}) |
||||
|
} |
||||
|
|
||||
|
// GzipPrecompressed provides the file extension for files precompressed with gzip encoding.
|
||||
|
type GzipPrecompressed struct { |
||||
|
Gzip |
||||
|
} |
||||
|
|
||||
|
// CaddyModule returns the Caddy module information.
|
||||
|
func (GzipPrecompressed) CaddyModule() caddy.ModuleInfo { |
||||
|
return caddy.ModuleInfo{ |
||||
|
ID: "http.precompressed.gzip", |
||||
|
New: func() caddy.Module { return new(GzipPrecompressed) }, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Suffix returns the filename suffix of precompressed files.
|
||||
|
func (GzipPrecompressed) Suffix() string { return ".gz" } |
||||
|
|
||||
|
var _ encode.Precompressed = (*GzipPrecompressed)(nil) |
@ -0,0 +1,28 @@ |
|||||
|
package caddyzstd |
||||
|
|
||||
|
import ( |
||||
|
"github.com/caddyserver/caddy/v2" |
||||
|
"github.com/caddyserver/caddy/v2/modules/caddyhttp/encode" |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
caddy.RegisterModule(ZstdPrecompressed{}) |
||||
|
} |
||||
|
|
||||
|
// ZstdPrecompressed provides the file extension for files precompressed with zstandard encoding.
|
||||
|
type ZstdPrecompressed struct { |
||||
|
Zstd |
||||
|
} |
||||
|
|
||||
|
// CaddyModule returns the Caddy module information.
|
||||
|
func (ZstdPrecompressed) CaddyModule() caddy.ModuleInfo { |
||||
|
return caddy.ModuleInfo{ |
||||
|
ID: "http.precompressed.zstd", |
||||
|
New: func() caddy.Module { return new(ZstdPrecompressed) }, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Suffix returns the filename suffix of precompressed files.
|
||||
|
func (ZstdPrecompressed) Suffix() string { return ".zst" } |
||||
|
|
||||
|
var _ encode.Precompressed = (*ZstdPrecompressed)(nil) |
Loading…
Reference in new issue