github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/golang.org/x/net/http2/headermap.go (about) 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 5 package http2 6 7 import ( 8 "net/http" 9 "strings" 10 "sync" 11 ) 12 13 var ( 14 commonBuildOnce sync.Once 15 commonLowerHeader map[string]string // Go-Canonical-Case -> lower-case 16 commonCanonHeader map[string]string // lower-case -> Go-Canonical-Case 17 ) 18 19 func buildCommonHeaderMapsOnce() { 20 commonBuildOnce.Do(buildCommonHeaderMaps) 21 } 22 23 func buildCommonHeaderMaps() { 24 common := []string{ 25 "accept", 26 "accept-charset", 27 "accept-encoding", 28 "accept-language", 29 "accept-ranges", 30 "age", 31 "access-control-allow-origin", 32 "allow", 33 "authorization", 34 "cache-control", 35 "content-disposition", 36 "content-encoding", 37 "content-language", 38 "content-length", 39 "content-location", 40 "content-range", 41 "content-type", 42 "cookie", 43 "date", 44 "etag", 45 "expect", 46 "expires", 47 "from", 48 "host", 49 "if-match", 50 "if-modified-since", 51 "if-none-match", 52 "if-unmodified-since", 53 "last-modified", 54 "link", 55 "location", 56 "max-forwards", 57 "proxy-authenticate", 58 "proxy-authorization", 59 "range", 60 "referer", 61 "refresh", 62 "retry-after", 63 "server", 64 "set-cookie", 65 "strict-transport-security", 66 "trailer", 67 "transfer-encoding", 68 "user-agent", 69 "vary", 70 "via", 71 "www-authenticate", 72 } 73 commonLowerHeader = make(map[string]string, len(common)) 74 commonCanonHeader = make(map[string]string, len(common)) 75 for _, v := range common { 76 chk := http.CanonicalHeaderKey(v) 77 commonLowerHeader[chk] = v 78 commonCanonHeader[v] = chk 79 } 80 } 81 82 func lowerHeader(v string) string { 83 buildCommonHeaderMapsOnce() 84 if s, ok := commonLowerHeader[v]; ok { 85 return s 86 } 87 return strings.ToLower(v) 88 }