Documentation ¶
Overview ¶
Package middleware provides some types and functions common among middleware.
Index ¶
- Constants
- func IndexFile(root http.FileSystem, fpath string, indexFiles []string) (string, bool)
- func NewResponseRecorder(w http.ResponseWriter) *responseRecorder
- func SplitCommandAndArgs(command string) (cmd string, args []string, err error)
- type Handler
- type HandlerFunc
- type Middleware
- type Path
- type Replacer
Constants ¶
const (
EmptyStringReplacer = "-"
)
Variables ¶
This section is empty.
Functions ¶
func IndexFile ¶ added in v0.6.0
IndexFile looks for a file in /root/fpath/indexFile for each string in indexFiles. If an index file is found, it returns the root-relative path to the file and true. If no index file is found, empty string and false is returned. fpath must end in a forward slash '/' otherwise no index files will be tried (directory paths must end in a forward slash according to HTTP).
func NewResponseRecorder ¶
func NewResponseRecorder(w http.ResponseWriter) *responseRecorder
NewResponseRecorder makes and returns a new responseRecorder, which captures the HTTP Status code from the ResponseWriter and also the length of the response body written through it. Because a status is not set unless WriteHeader is called explicitly, this constructor initializes with a status code of 200 to cover the default case.
Types ¶
type Handler ¶
Handler is like http.Handler except ServeHTTP returns a status code and an error. The status code is for the client's benefit; the error value is for the server's benefit. The status code will be sent to the client while the error value will be logged privately. Sometimes, an error status code (4xx or 5xx) may be returned with a nil error when there is no reason to log the error on the server.
If a HandlerFunc returns an error (status >= 400), it should NOT write to the response. This philosophy makes middleware.Handler different from http.Handler: error handling should happen at the application layer or in dedicated error-handling middleware only rather than with an "every middleware for itself" paradigm.
The application or error-handling middleware should incorporate logic to ensure that the client always gets a proper response according to the status code. For security reasons, it should probably not reveal the actual error message. (Instead it should be logged, for example.)
Handlers which do write to the response should return a status value < 400 as a signal that a response has been written. In other words, only error-handling middleware or the application will write to the response for a status code >= 400. When ANY handler writes to the response, it should return a status code < 400 to signal others to NOT write to the response again, which would be erroneous.
type HandlerFunc ¶
HandlerFunc is a convenience type like http.HandlerFunc, except ServeHTTP returns a status code and an error. See Handler documentation for more information.
func (HandlerFunc) ServeHTTP ¶
func (f HandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error)
ServeHTTP implements the Handler interface.
type Middleware ¶
Middleware is the middle layer which represents the traditional idea of middleware: it chains one Handler to the next by being passed the next Handler in the chain.
type Replacer ¶ added in v0.6.0
Replacer is a type which can replace placeholder substrings in a string with actual values from a http.Request and responseRecorder. Always use NewReplacer to get one of these.
func NewReplacer ¶
NewReplacer makes a new replacer based on r and rr. Do not create a new replacer until r and rr have all the needed values, because this function copies those values into the replacer.
Directories ¶
Path | Synopsis |
---|---|
Package basicauth implements HTTP Basic Authentication.
|
Package basicauth implements HTTP Basic Authentication. |
Package browse provides middleware for listing files in a directory when directory path is requested instead of a specific file.
|
Package browse provides middleware for listing files in a directory when directory path is requested instead of a specific file. |
Package errors implements an HTTP error handling middleware.
|
Package errors implements an HTTP error handling middleware. |
Package extension is middleware for clean URLs.
|
Package extension is middleware for clean URLs. |
Package fastcgi has middleware that acts as a FastCGI client.
|
Package fastcgi has middleware that acts as a FastCGI client. |
Package git is the middleware that pull sites from git repo Caddyfile Syntax : git repo path { repo path branch key interval then command args } repo - git repository compulsory.
|
Package git is the middleware that pull sites from git repo Caddyfile Syntax : git repo path { repo path branch key interval then command args } repo - git repository compulsory. |
Package gzip provides a simple middleware layer that performs gzip compression on the response.
|
Package gzip provides a simple middleware layer that performs gzip compression on the response. |
Package headers provides middleware that appends headers to requests based on a set of configuration rules that define which routes receive which headers.
|
Package headers provides middleware that appends headers to requests based on a set of configuration rules that define which routes receive which headers. |
Package log implements basic but useful request (access) logging middleware.
|
Package log implements basic but useful request (access) logging middleware. |
Package markdown is middleware to render markdown files as HTML on-the-fly.
|
Package markdown is middleware to render markdown files as HTML on-the-fly. |
Package proxy is middleware that proxies requests.
|
Package proxy is middleware that proxies requests. |
Package redirect is middleware for redirecting certain requests to other locations.
|
Package redirect is middleware for redirecting certain requests to other locations. |
Package rewrite is middleware for rewriting requests internally to a different path.
|
Package rewrite is middleware for rewriting requests internally to a different path. |
Package templates implements template execution for files to be dynamically rendered for the client.
|
Package templates implements template execution for files to be dynamically rendered for the client. |
Package websockets implements a WebSocket server by executing a command and piping its input and output through the WebSocket connection.
|
Package websockets implements a WebSocket server by executing a command and piping its input and output through the WebSocket connection. |