gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

headermap.go (2203B)


      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 	"sync"
     10 )
     11 
     12 var (
     13 	commonBuildOnce   sync.Once
     14 	commonLowerHeader map[string]string // Go-Canonical-Case -> lower-case
     15 	commonCanonHeader map[string]string // lower-case -> Go-Canonical-Case
     16 )
     17 
     18 func buildCommonHeaderMapsOnce() {
     19 	commonBuildOnce.Do(buildCommonHeaderMaps)
     20 }
     21 
     22 func buildCommonHeaderMaps() {
     23 	common := []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 	}
     82 	commonLowerHeader = make(map[string]string, len(common))
     83 	commonCanonHeader = make(map[string]string, len(common))
     84 	for _, v := range common {
     85 		chk := http.CanonicalHeaderKey(v)
     86 		commonLowerHeader[chk] = v
     87 		commonCanonHeader[v] = chk
     88 	}
     89 }
     90 
     91 func lowerHeader(v string) (lower string, ascii bool) {
     92 	buildCommonHeaderMapsOnce()
     93 	if s, ok := commonLowerHeader[v]; ok {
     94 		return s, true
     95 	}
     96 	return asciiToLower(v)
     97 }
     98 
     99 func canonicalHeader(v string) string {
    100 	buildCommonHeaderMapsOnce()
    101 	if s, ok := commonCanonHeader[v]; ok {
    102 		return s
    103 	}
    104 	return http.CanonicalHeaderKey(v)
    105 }