12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // Copyright 2014 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package http2
- import (
- "net/http"
- "strings"
- "sync"
- )
- var (
- commonBuildOnce sync.Once
- commonLowerHeader map[string]string // Go-Canonical-Case -> lower-case
- commonCanonHeader map[string]string // lower-case -> Go-Canonical-Case
- )
- func buildCommonHeaderMapsOnce() {
- commonBuildOnce.Do(buildCommonHeaderMaps)
- }
- func buildCommonHeaderMaps() {
- common := []string{
- "accept",
- "accept-charset",
- "accept-encoding",
- "accept-language",
- "accept-ranges",
- "age",
- "access-control-allow-origin",
- "allow",
- "authorization",
- "cache-control",
- "content-disposition",
- "content-encoding",
- "content-language",
- "content-length",
- "content-location",
- "content-range",
- "content-type",
- "cookie",
- "date",
- "etag",
- "expect",
- "expires",
- "from",
- "host",
- "if-match",
- "if-modified-since",
- "if-none-match",
- "if-unmodified-since",
- "last-modified",
- "link",
- "location",
- "max-forwards",
- "proxy-authenticate",
- "proxy-authorization",
- "range",
- "referer",
- "refresh",
- "retry-after",
- "server",
- "set-cookie",
- "strict-transport-security",
- "trailer",
- "transfer-encoding",
- "user-agent",
- "vary",
- "via",
- "www-authenticate",
- }
- commonLowerHeader = make(map[string]string, len(common))
- commonCanonHeader = make(map[string]string, len(common))
- for _, v := range common {
- chk := http.CanonicalHeaderKey(v)
- commonLowerHeader[chk] = v
- commonCanonHeader[v] = chk
- }
- }
- func lowerHeader(v string) string {
- buildCommonHeaderMapsOnce()
- if s, ok := commonLowerHeader[v]; ok {
- return s
- }
- return strings.ToLower(v)
- }
|