diff options
author | Matthew Holt <mholt@users.noreply.github.com> | 2019-06-21 14:36:26 -0600 |
---|---|---|
committer | Matthew Holt <mholt@users.noreply.github.com> | 2019-06-21 14:36:26 -0600 |
commit | d49f762f6d9cdc2e92e8de40f0b0e99a9d0c4fc9 (patch) | |
tree | a4003b5967027faaf0cbbb6fbd7b8407a14a508c /modules/caddyhttp/headers | |
parent | 81a9e125b54b34d453c425dbd58a3270b9568dca (diff) |
Various bug fixes and minor improvements
- Fix static responder so it doesn't replace its own headers config,
and instead replaces the actual response header values
- caddyhttp.ResponseRecorder type optionally buffers response
- Add interface guards to ensure regexp matchers get provisioned
- Use default HTTP port if one is not explicitly set
- Encode middleware writes status code 200 if not written upstream
- Templates and markdown only try to execute on text responses
- Static file server sets Content-Type based on file extension only
(this whole thing -- MIME sniffing, etc -- needs more configurability)
Diffstat (limited to 'modules/caddyhttp/headers')
-rw-r--r-- | modules/caddyhttp/headers/headers.go | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/modules/caddyhttp/headers/headers.go b/modules/caddyhttp/headers/headers.go index 84dc453..d57b811 100644 --- a/modules/caddyhttp/headers/headers.go +++ b/modules/caddyhttp/headers/headers.go @@ -40,20 +40,25 @@ type RespHeaderOps struct { func (h Headers) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error { repl := r.Context().Value(caddy.ReplacerCtxKey).(caddy.Replacer) apply(h.Request, r.Header, repl) - if h.Response.Deferred || h.Response.Require != nil { - w = &responseWriterWrapper{ - ResponseWriterWrapper: &caddyhttp.ResponseWriterWrapper{ResponseWriter: w}, - replacer: repl, - require: h.Response.Require, - headerOps: h.Response.HeaderOps, + if h.Response != nil { + if h.Response.Deferred || h.Response.Require != nil { + w = &responseWriterWrapper{ + ResponseWriterWrapper: &caddyhttp.ResponseWriterWrapper{ResponseWriter: w}, + replacer: repl, + require: h.Response.Require, + headerOps: h.Response.HeaderOps, + } + } else { + apply(h.Response.HeaderOps, w.Header(), repl) } - } else { - apply(h.Response.HeaderOps, w.Header(), repl) } return next.ServeHTTP(w, r) } func apply(ops *HeaderOps, hdr http.Header, repl caddy.Replacer) { + if ops == nil { + return + } for fieldName, vals := range ops.Add { fieldName = repl.ReplaceAll(fieldName, "") for _, v := range vals { |