httpguts

Imports

Imports #

"net/textproto"
"strings"
"net"
"strings"
"unicode/utf8"
"golang.org/x/net/idna"

Constants & Variables

badTrailer var #

var badTrailer = map[string]bool{...}

isTokenTable var #

var isTokenTable = [256]bool{...}

validHostByte var #

See the validHostHeader comment.

var validHostByte = [256]bool{...}

Functions

HeaderValuesContainsToken function #

HeaderValuesContainsToken reports whether any string in values contains the provided token, ASCII case-insensitively.

func HeaderValuesContainsToken(values []string, token string) bool

IsTokenRune function #

func IsTokenRune(r rune) bool

PunycodeHostPort function #

PunycodeHostPort returns the IDNA Punycode version of the provided "host" or "host:port" string.

func PunycodeHostPort(v string) (string, error)

ValidHeaderFieldName function #

ValidHeaderFieldName reports whether v is a valid HTTP/1.x header name. HTTP/2 imposes the additional restriction that uppercase ASCII letters are not allowed. RFC 7230 says: header-field = field-name ":" OWS field-value OWS field-name = token token = 1*tchar tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA

func ValidHeaderFieldName(v string) bool

ValidHeaderFieldValue function #

ValidHeaderFieldValue reports whether v is a valid "field-value" according to http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 : message-header = field-name ":" [ field-value ] field-value = *( field-content | LWS ) field-content = http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 : TEXT = LWS = [CRLF] 1*( SP | HT ) CTL = RFC 7230 says: field-value = *( field-content / obs-fold ) obj-fold = N/A to http2, and deprecated field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] field-vchar = VCHAR / obs-text obs-text = %x80-FF VCHAR = "any visible [USASCII] character" http2 further says: "Similarly, HTTP/2 allows header field values that are not valid. While most of the values that can be encoded will not alter header field parsing, carriage return (CR, ASCII 0xd), line feed (LF, ASCII 0xa), and the zero character (NUL, ASCII 0x0) might be exploited by an attacker if they are translated verbatim. Any request or response that contains a character not permitted in a header field value MUST be treated as malformed (Section 8.1.2.6). Valid characters are defined by the field-content ABNF rule in Section 3.2 of [RFC7230]." This function does not (yet?) properly handle the rejection of strings that begin or end with SP or HTAB.

func ValidHeaderFieldValue(v string) bool

ValidHostHeader function #

ValidHostHeader reports whether h is a valid host header.

func ValidHostHeader(h string) bool

ValidTrailerHeader function #

ValidTrailerHeader reports whether name is a valid header field name to appear in trailers. See RFC 7230, Section 4.1.2

func ValidTrailerHeader(name string) bool

headerValueContainsToken function #

headerValueContainsToken reports whether v (assumed to be a 0#element, in the ABNF extension described in RFC 7230 section 7) contains token amongst its comma-separated tokens, ASCII case-insensitively.

func headerValueContainsToken(v string, token string) bool

isASCII function #

func isASCII(s string) bool

isCTL function #

isCTL reports whether b is a control byte, according to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 CTL =

func isCTL(b byte) bool

isLWS function #

isLWS reports whether b is linear white space, according to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 LWS = [CRLF] 1*( SP | HT )

func isLWS(b byte) bool

isOWS function #

isOWS reports whether b is an optional whitespace byte, as defined by RFC 7230 section 3.2.3.

func isOWS(b byte) bool

lowerASCII function #

lowerASCII returns the ASCII lowercase version of b.

func lowerASCII(b byte) byte

tokenEqual function #

tokenEqual reports whether t1 and t2 are equal, ASCII case-insensitively.

func tokenEqual(t1 string, t2 string) bool

trimOWS function #

trimOWS returns x with all optional whitespace removes from the beginning and end.

func trimOWS(x string) string

Generated with Arrow