cubefs
1// Copyright 2014 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package http26
7import (8"net/http"9"sync"10)
11
12var (13commonBuildOnce sync.Once14commonLowerHeader map[string]string // Go-Canonical-Case -> lower-case15commonCanonHeader map[string]string // lower-case -> Go-Canonical-Case16)
17
18func buildCommonHeaderMapsOnce() {19commonBuildOnce.Do(buildCommonHeaderMaps)20}
21
22func buildCommonHeaderMaps() {23common := []string{24"accept",25"accept-charset",26"accept-encoding",27"accept-language",28"accept-ranges",29"age",30"access-control-allow-credentials",31"access-control-allow-headers",32"access-control-allow-methods",33"access-control-allow-origin",34"access-control-expose-headers",35"access-control-max-age",36"access-control-request-headers",37"access-control-request-method",38"allow",39"authorization",40"cache-control",41"content-disposition",42"content-encoding",43"content-language",44"content-length",45"content-location",46"content-range",47"content-type",48"cookie",49"date",50"etag",51"expect",52"expires",53"from",54"host",55"if-match",56"if-modified-since",57"if-none-match",58"if-unmodified-since",59"last-modified",60"link",61"location",62"max-forwards",63"origin",64"proxy-authenticate",65"proxy-authorization",66"range",67"referer",68"refresh",69"retry-after",70"server",71"set-cookie",72"strict-transport-security",73"trailer",74"transfer-encoding",75"user-agent",76"vary",77"via",78"www-authenticate",79"x-forwarded-for",80"x-forwarded-proto",81}82commonLowerHeader = make(map[string]string, len(common))83commonCanonHeader = make(map[string]string, len(common))84for _, v := range common {85chk := http.CanonicalHeaderKey(v)86commonLowerHeader[chk] = v87commonCanonHeader[v] = chk88}89}
90
91func lowerHeader(v string) (lower string, ascii bool) {92buildCommonHeaderMapsOnce()93if s, ok := commonLowerHeader[v]; ok {94return s, true95}96return asciiToLower(v)97}
98
99func canonicalHeader(v string) string {100buildCommonHeaderMapsOnce()101if s, ok := commonCanonHeader[v]; ok {102return s103}104return http.CanonicalHeaderKey(v)105}
106