1'use strict'
2
3/** @type {Record<string, string | undefined>} */
4const headerNameLowerCasedRecord = {}
5
6// https://developer.mozilla.org/docs/Web/HTTP/Headers
7const wellknownHeaderNames = [
8  'Accept',
9  'Accept-Encoding',
10  'Accept-Language',
11  'Accept-Ranges',
12  'Access-Control-Allow-Credentials',
13  'Access-Control-Allow-Headers',
14  'Access-Control-Allow-Methods',
15  'Access-Control-Allow-Origin',
16  'Access-Control-Expose-Headers',
17  'Access-Control-Max-Age',
18  'Access-Control-Request-Headers',
19  'Access-Control-Request-Method',
20  'Age',
21  'Allow',
22  'Alt-Svc',
23  'Alt-Used',
24  'Authorization',
25  'Cache-Control',
26  'Clear-Site-Data',
27  'Connection',
28  'Content-Disposition',
29  'Content-Encoding',
30  'Content-Language',
31  'Content-Length',
32  'Content-Location',
33  'Content-Range',
34  'Content-Security-Policy',
35  'Content-Security-Policy-Report-Only',
36  'Content-Type',
37  'Cookie',
38  'Cross-Origin-Embedder-Policy',
39  'Cross-Origin-Opener-Policy',
40  'Cross-Origin-Resource-Policy',
41  'Date',
42  'Device-Memory',
43  'Downlink',
44  'ECT',
45  'ETag',
46  'Expect',
47  'Expect-CT',
48  'Expires',
49  'Forwarded',
50  'From',
51  'Host',
52  'If-Match',
53  'If-Modified-Since',
54  'If-None-Match',
55  'If-Range',
56  'If-Unmodified-Since',
57  'Keep-Alive',
58  'Last-Modified',
59  'Link',
60  'Location',
61  'Max-Forwards',
62  'Origin',
63  'Permissions-Policy',
64  'Pragma',
65  'Proxy-Authenticate',
66  'Proxy-Authorization',
67  'RTT',
68  'Range',
69  'Referer',
70  'Referrer-Policy',
71  'Refresh',
72  'Retry-After',
73  'Sec-WebSocket-Accept',
74  'Sec-WebSocket-Extensions',
75  'Sec-WebSocket-Key',
76  'Sec-WebSocket-Protocol',
77  'Sec-WebSocket-Version',
78  'Server',
79  'Server-Timing',
80  'Service-Worker-Allowed',
81  'Service-Worker-Navigation-Preload',
82  'Set-Cookie',
83  'SourceMap',
84  'Strict-Transport-Security',
85  'Supports-Loading-Mode',
86  'TE',
87  'Timing-Allow-Origin',
88  'Trailer',
89  'Transfer-Encoding',
90  'Upgrade',
91  'Upgrade-Insecure-Requests',
92  'User-Agent',
93  'Vary',
94  'Via',
95  'WWW-Authenticate',
96  'X-Content-Type-Options',
97  'X-DNS-Prefetch-Control',
98  'X-Frame-Options',
99  'X-Permitted-Cross-Domain-Policies',
100  'X-Powered-By',
101  'X-Requested-With',
102  'X-XSS-Protection'
103]
104
105for (let i = 0; i < wellknownHeaderNames.length; ++i) {
106  const key = wellknownHeaderNames[i]
107  const lowerCasedKey = key.toLowerCase()
108  headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] =
109    lowerCasedKey
110}
111
112// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.
113Object.setPrototypeOf(headerNameLowerCasedRecord, null)
114
115module.exports = {
116  wellknownHeaderNames,
117  headerNameLowerCasedRecord
118}
119