fix: match net module headers & http.IncomingMessage headers (#17517)
* fix: match net module headers & http.IncomingMessage headers * update net doc for cleanliness * address feedback from review * Update spec/api-net-spec.js Co-Authored-By: codebytere <codebytere@github.com> * add special cookie case
This commit is contained in:
parent
7c6cedb119
commit
8ea33d69ac
3 changed files with 145 additions and 30 deletions
|
@ -16,6 +16,29 @@ Object.setPrototypeOf(URLRequest.prototype, EventEmitter.prototype)
|
|||
|
||||
const kSupportedProtocols = new Set(['http:', 'https:'])
|
||||
|
||||
// set of headers that Node.js discards duplicates for
|
||||
// see https://nodejs.org/api/http.html#http_message_headers
|
||||
const discardableDuplicateHeaders = new Set([
|
||||
'content-type',
|
||||
'content-length',
|
||||
'user-agent',
|
||||
'referer',
|
||||
'host',
|
||||
'authorization',
|
||||
'proxy-authorization',
|
||||
'if-modified-since',
|
||||
'if-unmodified-since',
|
||||
'from',
|
||||
'location',
|
||||
'max-forwards',
|
||||
'retry-after',
|
||||
'etag',
|
||||
'last-modified',
|
||||
'server',
|
||||
'age',
|
||||
'expires'
|
||||
])
|
||||
|
||||
class IncomingMessage extends Readable {
|
||||
constructor (urlRequest) {
|
||||
super()
|
||||
|
@ -41,7 +64,23 @@ class IncomingMessage extends Readable {
|
|||
}
|
||||
|
||||
get headers () {
|
||||
return this.urlRequest.rawResponseHeaders
|
||||
const filteredHeaders = {}
|
||||
const rawHeaders = this.urlRequest.rawResponseHeaders
|
||||
Object.keys(rawHeaders).forEach(header => {
|
||||
if (header in filteredHeaders && discardableDuplicateHeaders.has(header)) {
|
||||
// do nothing with discardable duplicate headers
|
||||
} else {
|
||||
if (header === 'set-cookie') {
|
||||
// keep set-cookie as an array per Node.js rules
|
||||
// see https://nodejs.org/api/http.html#http_message_headers
|
||||
filteredHeaders[header] = rawHeaders[header]
|
||||
} else {
|
||||
// for non-cookie headers, the values are joined together with ', '
|
||||
filteredHeaders[header] = rawHeaders[header].join(', ')
|
||||
}
|
||||
}
|
||||
})
|
||||
return filteredHeaders
|
||||
}
|
||||
|
||||
get httpVersion () {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue