summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/headers
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-06-21 14:36:26 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2019-06-21 14:36:26 -0600
commitd49f762f6d9cdc2e92e8de40f0b0e99a9d0c4fc9 (patch)
treea4003b5967027faaf0cbbb6fbd7b8407a14a508c /modules/caddyhttp/headers
parent81a9e125b54b34d453c425dbd58a3270b9568dca (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.go21
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 {