mirror of
https://github.com/caddyserver/caddy.git
synced 2025-06-04 03:00:47 +08:00
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
This commit is contained in:
@ -19,8 +19,10 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/caddyserver/caddy/v2"
|
||||
"github.com/caddyserver/caddy/v2/caddyconfig"
|
||||
"github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile"
|
||||
"github.com/caddyserver/caddy/v2/modules/caddyhttp"
|
||||
"github.com/caddyserver/caddy/v2/modules/caddyhttp/encode"
|
||||
"github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite"
|
||||
)
|
||||
|
||||
@ -33,10 +35,11 @@ func init() {
|
||||
// server and configures it with this syntax:
|
||||
//
|
||||
// file_server [<matcher>] [browse] {
|
||||
// root <path>
|
||||
// hide <files...>
|
||||
// index <files...>
|
||||
// browse [<template_file>]
|
||||
// root <path>
|
||||
// hide <files...>
|
||||
// index <files...>
|
||||
// browse [<template_file>]
|
||||
// precompressed <formats...>
|
||||
// }
|
||||
//
|
||||
func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) {
|
||||
@ -77,6 +80,26 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error)
|
||||
}
|
||||
fsrv.Browse = new(Browse)
|
||||
h.Args(&fsrv.Browse.TemplateFile)
|
||||
case "precompressed":
|
||||
var order []string
|
||||
for h.NextArg() {
|
||||
modID := "http.precompressed." + h.Val()
|
||||
mod, err := caddy.GetModule(modID)
|
||||
if err != nil {
|
||||
return nil, h.Errf("getting module named '%s': %v", modID, err)
|
||||
}
|
||||
inst := mod.New()
|
||||
precompress, ok := inst.(encode.Precompressed)
|
||||
if !ok {
|
||||
return nil, h.Errf("module %s is not a precompressor; is %T", modID, inst)
|
||||
}
|
||||
if fsrv.PrecompressedRaw == nil {
|
||||
fsrv.PrecompressedRaw = make(caddy.ModuleMap)
|
||||
}
|
||||
fsrv.PrecompressedRaw[h.Val()] = caddyconfig.JSON(precompress, nil)
|
||||
order = append(order, h.Val())
|
||||
}
|
||||
fsrv.PrecompressedOrder = order
|
||||
default:
|
||||
return nil, h.Errf("unknown subdirective '%s'", h.Val())
|
||||
}
|
||||
|
Reference in New Issue
Block a user