Documentation

Overview

    Package httputil contains a bunch of HTTP utility code.

    Index

    Constants

    View Source
    const (
    	PathBaseHeader   = "X-Prefixhandler-Pathbase"
    	PathSuffixHeader = "X-Prefixhandler-Pathsuffix"
    )

    Variables

    This section is empty.

    Functions

    func BadRequestError

    func BadRequestError(conn http.ResponseWriter, errorMessage string, args ...interface{})

    func BaseURL

    func BaseURL(urlStr string, req *http.Request) (string, error)

      BaseURL returns the base URL (scheme + host and optional port + blobserver prefix) that should be used for requests (and responses) subsequent to req. The returned URL does not end in a trailing slash. The scheme and host:port are taken from urlStr if present, or derived from req otherwise. The prefix part comes from urlStr.

      func BasicAuth

      func BasicAuth(req *http.Request) (username, password string, err error)

        BasicAuth parses the Authorization header on req If absent or invalid, an error is returned.

        func CloseBody

        func CloseBody(rc io.ReadCloser)

          CloseBody should be used to close an http.Response.Body.

          It does a final little Read to maybe see EOF (to trigger connection re-use) before calling Close.

          func DecodeJSON

          func DecodeJSON(res *http.Response, dest interface{}) error

            DecodeJSON decodes the JSON in res.Body into dest and then closes res.Body. It defensively caps the JSON at 8 MB for now.

            func ErrorRouting

            func ErrorRouting(conn http.ResponseWriter, req *http.Request)

            func ForbiddenError

            func ForbiddenError(conn http.ResponseWriter, errorMessage string, args ...interface{})

            func IsGet

            func IsGet(r *http.Request) bool

              IsGet reports whether r.Method is a GET or HEAD request.

              func IsLocalhost

              func IsLocalhost(req *http.Request) bool

                IsLocalhost reports whether the requesting connection is from this machine and has the same owner as this process.

                func IsWebsocketUpgrade

                func IsWebsocketUpgrade(req *http.Request) bool

                func MustGet

                func MustGet(req *http.Request, param string) string

                  MustGet returns a non-empty GET (or HEAD) parameter param and panics with a special error as caught by a deferred httputil.Recover.

                  func OptionalInt

                  func OptionalInt(req *http.Request, param string) int

                    OptionalInt returns the integer in req given by param, or 0 if not present. If the form value is not an integer, it panics with a a value understood by Recover or RecoverJSON.

                    func PathBase

                    func PathBase(req *http.Request) string

                      PathBase returns a Request's base path, if it went via a PrefixHandler.

                      func PathSuffix

                      func PathSuffix(req *http.Request) string

                        PathSuffix returns a Request's suffix path, if it went via a PrefixHandler.

                        func Recover

                        func Recover(rw http.ResponseWriter, req *http.Request)

                          Recover is meant to be used at the top of handlers with "defer" to catch errors from MustGet, etc:

                          func handler(rw http.ResponseWriter, req *http.Request) {
                              defer httputil.Recover(rw, req)
                              id := req.MustGet("id")
                              ....
                          

                          Recover will send the proper HTTP error type and message (e.g. a 400 Bad Request for MustGet)

                          func RecoverJSON

                          func RecoverJSON(rw http.ResponseWriter, req *http.Request)

                            RecoverJSON is like Recover but returns with a JSON response.

                            func RequestEntityTooLargeError

                            func RequestEntityTooLargeError(conn http.ResponseWriter)

                            func RequestTargetPort

                            func RequestTargetPort(req *http.Request) int

                              RequestTargetPort returns the port targetted by the client in req. If not present, it returns 80, or 443 if TLS is used.

                              func ReturnJSON

                              func ReturnJSON(rw http.ResponseWriter, data interface{})

                              func ReturnJSONCode

                              func ReturnJSONCode(rw http.ResponseWriter, code int, data interface{})

                              func ServeError

                              func ServeError(conn http.ResponseWriter, req *http.Request, err error)

                              func ServeJSONError

                              func ServeJSONError(rw http.ResponseWriter, err interface{})

                                ServeJSONError sends a JSON error response to rw for the provided error value.

                                Types

                                type InvalidMethodError

                                type InvalidMethodError struct{}

                                  An InvalidMethodError is returned when an HTTP handler is invoked with an unsupported method.

                                  func (InvalidMethodError) Error

                                  func (InvalidMethodError) Error() string

                                  func (InvalidMethodError) HTTPCode

                                  func (InvalidMethodError) HTTPCode() int

                                  type InvalidParameterError

                                  type InvalidParameterError string

                                    An InvalidParameterError represents an invalid HTTP parameter. The underlying string is the invalid parameter name, not value.

                                    func (InvalidParameterError) Error

                                    func (p InvalidParameterError) Error() string

                                    func (InvalidParameterError) HTTPCode

                                    func (InvalidParameterError) HTTPCode() int

                                    type MissingParameterError

                                    type MissingParameterError string

                                      A MissingParameterError represents a missing HTTP parameter. The underlying string is the missing parameter name.

                                      func (MissingParameterError) Error

                                      func (p MissingParameterError) Error() string

                                      func (MissingParameterError) HTTPCode

                                      func (MissingParameterError) HTTPCode() int

                                      type PrefixHandler

                                      type PrefixHandler struct {
                                      	Prefix  string
                                      	Handler http.Handler
                                      }

                                        PrefixHandler wraps another Handler and verifies that all requests' Path begin with Prefix. If they don't, a 500 error is returned. If they do, the headers PathBaseHeader and PathSuffixHeader are set on the request before proxying to Handler. PathBaseHeader is just the value of Prefix. PathSuffixHeader is the part of the path that follows Prefix.

                                        func (*PrefixHandler) ServeHTTP

                                        func (p *PrefixHandler) ServeHTTP(rw http.ResponseWriter, req *http.Request)

                                        type ServerError

                                        type ServerError string

                                          A ServerError is a generic 500 error.

                                          func (ServerError) Error

                                          func (e ServerError) Error() string

                                          func (ServerError) HTTPCode

                                          func (ServerError) HTTPCode() int