-
-
Notifications
You must be signed in to change notification settings - Fork 4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
encode,staticfiles: Content negotiation, precompressed files (#4045)
* 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 modules
- Loading branch information
Showing
12 changed files
with
768 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" | ||
] | ||
} | ||
] | ||
} | ||
] | ||
} | ||
} | ||
} | ||
} | ||
} |
41 changes: 41 additions & 0 deletions
41
caddytest/integration/caddyfile_adapt/file_server_precompressed.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" | ||
] | ||
} | ||
] | ||
} | ||
] | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.