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