cubefs

Форк
0
105 строк · 2.2 Кб
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
}
106

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.