mirror of
https://github.com/caddyserver/caddy.git
synced 2025-05-28 14:45:49 +08:00
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)
This commit is contained in:
@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"gopkg.in/russross/blackfriday.v2"
|
||||
@ -28,12 +29,19 @@ func (m Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyht
|
||||
buf.Reset()
|
||||
defer bufPool.Put(buf)
|
||||
|
||||
rr := caddyhttp.NewResponseRecorder(w, buf)
|
||||
shouldBuf := func(status int) bool {
|
||||
return strings.HasPrefix(w.Header().Get("Content-Type"), "text/")
|
||||
}
|
||||
|
||||
err := next.ServeHTTP(rr, r)
|
||||
rec := caddyhttp.NewResponseRecorder(w, buf, shouldBuf)
|
||||
|
||||
err := next.ServeHTTP(rec, r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !rec.Buffered() {
|
||||
return nil
|
||||
}
|
||||
|
||||
output := blackfriday.Run(buf.Bytes())
|
||||
|
||||
@ -43,7 +51,7 @@ func (m Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyht
|
||||
w.Header().Del("Etag") // don't know a way to quickly generate etag for dynamic content
|
||||
w.Header().Del("Last-Modified") // useless for dynamic content since it's always changing
|
||||
|
||||
w.WriteHeader(rr.Status())
|
||||
w.WriteHeader(rec.Status())
|
||||
w.Write(output)
|
||||
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user