Documentation
¶
Overview ¶
Package encode implements an encoder middleware for Kengine. The initial enhancements related to Accept-Encoding, minimum content length, and buffer/writer pools were adapted from https://github.com/xi2/httpgzip then modified heavily to accommodate modular encoders and fix bugs. Code borrowed from that repository is Copyright (c) 2015 The Httpgzip Authors.
Index ¶
- func AcceptedEncodings(r *http.Request, preferredOrder []string) []string
- type Encode
- func (Encode) KengineModule() kengine.ModuleInfo
- func (enc *Encode) Match(rw *responseWriter) bool
- func (enc *Encode) Provision(ctx kengine.Context) error
- func (enc *Encode) ServeHTTP(w http.ResponseWriter, r *http.Request, next kenginehttp.Handler) error
- func (enc *Encode) UnmarshalKenginefile(d *kenginefile.Dispenser) error
- func (enc *Encode) Validate() error
- type Encoder
- type Encoding
- type Precompressed
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AcceptedEncodings ¶
AcceptedEncodings returns the list of encodings that the client supports, in descending order of preference. The client preference via q-factor and the server preference via Prefer setting are taken into account. If the Sec-WebSocket-Key header is present then non-identity encodings are not considered. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html.
Types ¶
type Encode ¶
type Encode struct {
// Selection of compression algorithms to choose from. The best one
// will be chosen based on the client's Accept-Encoding header.
EncodingsRaw kengine.ModuleMap `json:"encodings,omitempty" kengine:"namespace=http.encoders"`
// If the client has no strong preference, choose these encodings in order.
Prefer []string `json:"prefer,omitempty"`
// Only encode responses that are at least this many bytes long.
MinLength int `json:"minimum_length,omitempty"`
// Only encode responses that match against this ResponseMmatcher.
// The default is a collection of text-based Content-Type headers.
Matcher *kenginehttp.ResponseMatcher `json:"match,omitempty"`
// contains filtered or unexported fields
}
Encode is a middleware which can encode responses.
func (Encode) KengineModule ¶
func (Encode) KengineModule() kengine.ModuleInfo
KengineModule returns the Kengine module information.
func (*Encode) ServeHTTP ¶
func (enc *Encode) ServeHTTP(w http.ResponseWriter, r *http.Request, next kenginehttp.Handler) error
func (*Encode) UnmarshalKenginefile ¶
func (enc *Encode) UnmarshalKenginefile(d *kenginefile.Dispenser) error
UnmarshalKenginefile sets up the handler from Kenginefile tokens. Syntax:
encode [<matcher>] <formats...> {
gzip [<level>]
zstd
minimum_length <length>
# response matcher block
match {
status <code...>
header <field> [<value>]
}
# or response matcher single line syntax
match [header <field> [<value>]] | [status <code...>]
}
Specifying the formats on the first line will use those formats' defaults.
type Encoder ¶
type Encoder interface {
io.WriteCloser
Reset(io.Writer)
Flush() error // encoder by default buffers data to maximize compressing rate
}
Encoder is a type which can encode a stream of data.
type Encoding ¶
Encoding is a type which can create encoders of its kind and return the name used in the Accept-Encoding header.
type Precompressed ¶
Precompressed is a type which returns filename suffix of precompressed file and Accept-Encoding header to use when serving this file.