119 lines
2.5 KiB
JavaScript
119 lines
2.5 KiB
JavaScript
|
'use strict'
|
||
|
|
||
|
/** @type {Record<string, string | undefined>} */
|
||
|
const headerNameLowerCasedRecord = {}
|
||
|
|
||
|
// https://developer.mozilla.org/docs/Web/HTTP/Headers
|
||
|
const wellknownHeaderNames = [
|
||
|
'Accept',
|
||
|
'Accept-Encoding',
|
||
|
'Accept-Language',
|
||
|
'Accept-Ranges',
|
||
|
'Access-Control-Allow-Credentials',
|
||
|
'Access-Control-Allow-Headers',
|
||
|
'Access-Control-Allow-Methods',
|
||
|
'Access-Control-Allow-Origin',
|
||
|
'Access-Control-Expose-Headers',
|
||
|
'Access-Control-Max-Age',
|
||
|
'Access-Control-Request-Headers',
|
||
|
'Access-Control-Request-Method',
|
||
|
'Age',
|
||
|
'Allow',
|
||
|
'Alt-Svc',
|
||
|
'Alt-Used',
|
||
|
'Authorization',
|
||
|
'Cache-Control',
|
||
|
'Clear-Site-Data',
|
||
|
'Connection',
|
||
|
'Content-Disposition',
|
||
|
'Content-Encoding',
|
||
|
'Content-Language',
|
||
|
'Content-Length',
|
||
|
'Content-Location',
|
||
|
'Content-Range',
|
||
|
'Content-Security-Policy',
|
||
|
'Content-Security-Policy-Report-Only',
|
||
|
'Content-Type',
|
||
|
'Cookie',
|
||
|
'Cross-Origin-Embedder-Policy',
|
||
|
'Cross-Origin-Opener-Policy',
|
||
|
'Cross-Origin-Resource-Policy',
|
||
|
'Date',
|
||
|
'Device-Memory',
|
||
|
'Downlink',
|
||
|
'ECT',
|
||
|
'ETag',
|
||
|
'Expect',
|
||
|
'Expect-CT',
|
||
|
'Expires',
|
||
|
'Forwarded',
|
||
|
'From',
|
||
|
'Host',
|
||
|
'If-Match',
|
||
|
'If-Modified-Since',
|
||
|
'If-None-Match',
|
||
|
'If-Range',
|
||
|
'If-Unmodified-Since',
|
||
|
'Keep-Alive',
|
||
|
'Last-Modified',
|
||
|
'Link',
|
||
|
'Location',
|
||
|
'Max-Forwards',
|
||
|
'Origin',
|
||
|
'Permissions-Policy',
|
||
|
'Pragma',
|
||
|
'Proxy-Authenticate',
|
||
|
'Proxy-Authorization',
|
||
|
'RTT',
|
||
|
'Range',
|
||
|
'Referer',
|
||
|
'Referrer-Policy',
|
||
|
'Refresh',
|
||
|
'Retry-After',
|
||
|
'Sec-WebSocket-Accept',
|
||
|
'Sec-WebSocket-Extensions',
|
||
|
'Sec-WebSocket-Key',
|
||
|
'Sec-WebSocket-Protocol',
|
||
|
'Sec-WebSocket-Version',
|
||
|
'Server',
|
||
|
'Server-Timing',
|
||
|
'Service-Worker-Allowed',
|
||
|
'Service-Worker-Navigation-Preload',
|
||
|
'Set-Cookie',
|
||
|
'SourceMap',
|
||
|
'Strict-Transport-Security',
|
||
|
'Supports-Loading-Mode',
|
||
|
'TE',
|
||
|
'Timing-Allow-Origin',
|
||
|
'Trailer',
|
||
|
'Transfer-Encoding',
|
||
|
'Upgrade',
|
||
|
'Upgrade-Insecure-Requests',
|
||
|
'User-Agent',
|
||
|
'Vary',
|
||
|
'Via',
|
||
|
'WWW-Authenticate',
|
||
|
'X-Content-Type-Options',
|
||
|
'X-DNS-Prefetch-Control',
|
||
|
'X-Frame-Options',
|
||
|
'X-Permitted-Cross-Domain-Policies',
|
||
|
'X-Powered-By',
|
||
|
'X-Requested-With',
|
||
|
'X-XSS-Protection'
|
||
|
]
|
||
|
|
||
|
for (let i = 0; i < wellknownHeaderNames.length; ++i) {
|
||
|
const key = wellknownHeaderNames[i]
|
||
|
const lowerCasedKey = key.toLowerCase()
|
||
|
headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] =
|
||
|
lowerCasedKey
|
||
|
}
|
||
|
|
||
|
// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.
|
||
|
Object.setPrototypeOf(headerNameLowerCasedRecord, null)
|
||
|
|
||
|
module.exports = {
|
||
|
wellknownHeaderNames,
|
||
|
headerNameLowerCasedRecord
|
||
|
}
|