Documentation
¶
Overview ¶
Package httputil contains utilities for HTTP clients and servers.
Index ¶
- Variables
- func CheckConditionals(r *http.Request, etag string) int
- func ConditionalOptions(r *http.Request) []client.RequestOption
- func ErrorResponse(w http.ResponseWriter, r *http.Request, status int, msg string, args ...any)
- func Errorf(status int, format string, args ...any) error
- func FilterHeaders(headers http.Header, skip ...string) http.Header
- func ServeCacheHit(w http.ResponseWriter, headers http.Header, body io.ReadCloser, openErr error) (handled bool, err error)
- func ServeCacheStat(w http.ResponseWriter, headers http.Header, statErr error) (handled bool)
- type HTTPError
- type HTTPResponder
Constants ¶
This section is empty.
Variables ¶
var HopByHopHeaders = []string{
"Connection",
"Keep-Alive",
"Proxy-Authenticate",
"Proxy-Authorization",
"Te",
"Trailers",
"Transfer-Encoding",
"Upgrade",
"Host",
}
HopByHopHeaders are hop-by-hop headers that should not be forwarded by proxies (RFC 7230).
var TransportHeaders = []string{
"Content-Length",
"Date",
"Accept-Encoding",
"User-Agent",
"Transfer-Encoding",
"Time-To-Live",
"If-Match",
"If-None-Match",
"Range",
"If-Range",
"Content-Range",
}
TransportHeaders are headers added by the HTTP transport layer that should not be cached.
Functions ¶
func CheckConditionals ¶
CheckConditionals evaluates RFC 7232 If-Match and If-None-Match precondition headers on r against etag. It returns 0 when all preconditions pass, otherwise the HTTP status the caller should send: 412 Precondition Failed for a failed If-Match, or 304 Not Modified for a satisfied If-None-Match. It is for callers that serve a body directly (not via ServeCacheHit) and need the status code.
func ConditionalOptions ¶
func ConditionalOptions(r *http.Request) []client.RequestOption
ConditionalOptions extracts conditional-request and range options from an incoming request, for forwarding to a cache Open or Stat. Range/If-Range are honoured by Open and ignored by Stat.
func ErrorResponse ¶
ErrorResponse creates an error response with the given code and format, and also logs a message.
func FilterHeaders ¶
FilterHeaders returns a copy of headers with the specified header keys removed.
func ServeCacheHit ¶
func ServeCacheHit(w http.ResponseWriter, headers http.Header, body io.ReadCloser, openErr error) (handled bool, err error)
ServeCacheHit writes the outcome of a cache Open to w. headers and body are the Open return values and openErr its error. It handles the success and conditional cases: a nil error streams the body (always closing it), a satisfied If-None-Match (ErrNotModified) writes 304 with the stored headers, and a failed If-Match (ErrPreconditionFailed) writes 412. It returns handled=false for any other error (e.g. os.ErrNotExist) so the caller can map it to its own status.
func ServeCacheStat ¶
ServeCacheStat answers a metadata-only (HEAD) request from the outcome of a cache Stat. It mirrors ServeCacheHit without a body: success writes 200 with the stored headers, ErrNotModified writes 304 with headers, and ErrPreconditionFailed writes 412. It returns handled=false for any other error so the caller can map it to its own status.
Types ¶
type HTTPResponder ¶
type HTTPResponder interface {
error
WriteHTTP(http.ResponseWriter, *http.Request)
}
HTTPResponder is an error that knows how to write itself as an HTTP response.