| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 8f2b8b3 commit 6590023
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -252,6 +252,7 @@ const kProceed = Symbol('proceed'); | |||
| 252 | 252 | const kRemoteSettings = Symbol('remote-settings'); | |
| 253 | 253 | const kRequestAsyncResource = Symbol('requestAsyncResource'); | |
| 254 | 254 | const kSentHeaders = Symbol('sent-headers'); | |
| 255 | + const kRawHeaders = Symbol('raw-headers'); | ||
| 255 | 256 | const kSentTrailers = Symbol('sent-trailers'); | |
| 256 | 257 | const kServer = Symbol('server'); | |
| 257 | 258 | const kState = Symbol('state'); | |
@@ -1813,12 +1814,14 @@ class ClientHttp2Session extends Http2Session { | |||
| 1813 | 1814 | ||
| 1814 | 1815 | let headersList; | |
| 1815 | 1816 | let headersObject; | |
| 1817 | + let rawHeaders; | ||
| 1816 | 1818 | let scheme; | |
| 1817 | 1819 | let authority; | |
| 1818 | 1820 | let method; | |
| 1819 | 1821 | ||
| 1820 | 1822 | if (ArrayIsArray(headersParam)) { | |
| 1821 | 1823 | ({ | |
| 1824 | + rawHeaders, | ||
| 1822 | 1825 | headersList, | |
| 1823 | 1826 | scheme, | |
| 1824 | 1827 | authority, | |
@@ -1865,6 +1868,7 @@ class ClientHttp2Session extends Http2Session { | |||
| 1865 | 1868 | // eslint-disable-next-line no-use-before-define | |
| 1866 | 1869 | const stream = new ClientHttp2Stream(this, undefined, undefined, {}); | |
| 1867 | 1870 | stream[kSentHeaders] = headersObject; // N.b. Only set for object headers, not raw headers | |
| 1871 | + stream[kRawHeaders] = rawHeaders; // N.b. Only set for raw headers, not object headers | ||
| 1868 | 1872 | stream[kOrigin] = `${scheme}://${authority}`; | |
| 1869 | 1873 | const reqAsync = new AsyncResource('PendingRequest'); | |
| 1870 | 1874 | stream[kRequestAsyncResource] = reqAsync; | |
@@ -2134,6 +2138,33 @@ class Http2Stream extends Duplex { | |||
| 2134 | 2138 | } | |
| 2135 | 2139 | ||
| 2136 | 2140 | get sentHeaders() { | |
| 2141 | + if (this[kSentHeaders] || !this[kRawHeaders]) { | ||
| 2142 | + return this[kSentHeaders]; | ||
| 2143 | + } | ||
| 2144 | + | ||
| 2145 | + const rawHeaders = this[kRawHeaders]; | ||
| 2146 | + const headersObject = { __proto__: null }; | ||
| 2147 | + | ||
| 2148 | + for (let i = 0; i < rawHeaders.length; i += 2) { | ||
| 2149 | + const key = rawHeaders[i]; | ||
| 2150 | + const value = rawHeaders[i + 1]; | ||
| 2151 | + | ||
| 2152 | + const existing = headersObject[key]; | ||
| 2153 | + if (existing === undefined) { | ||
| 2154 | + headersObject[key] = value; | ||
| 2155 | + } else if (ArrayIsArray(existing)) { | ||
| 2156 | + existing.push(value); | ||
| 2157 | + } else { | ||
| 2158 | + headersObject[key] = [existing, value]; | ||
| 2159 | + } | ||
| 2160 | + } | ||
| 2161 | + | ||
| 2162 | + if (rawHeaders[kSensitiveHeaders] !== undefined) { | ||
| 2163 | + headersObject[kSensitiveHeaders] = rawHeaders[kSensitiveHeaders]; | ||
| 2164 | + } | ||
| 2165 | + | ||
| 2166 | + this[kSentHeaders] = headersObject; | ||
| 2167 | + | ||
| 2137 | 2168 | return this[kSentHeaders]; | |
| 2138 | 2169 | } | |
| 2139 | 2170 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -677,15 +677,23 @@ function prepareRequestHeadersArray(headers, session) { | |||
| 677 | 677 | throw new ERR_HTTP2_CONNECT_PATH(); | |
| 678 | 678 | } | |
| 679 | 679 | ||
| 680 | - const headersList = buildNgHeaderString( | ||
| 680 | + const rawHeaders = | ||
| 681 | 681 | additionalPsuedoHeaders.length ? | |
| 682 | 682 | additionalPsuedoHeaders.concat(headers) : | |
| 683 | - headers, | ||
| 683 | + headers; | ||
| 684 | + | ||
| 685 | + if (headers[kSensitiveHeaders] !== undefined) { | ||
| 686 | + rawHeaders[kSensitiveHeaders] = headers[kSensitiveHeaders]; | ||
| 687 | + } | ||
| 688 | + | ||
| 689 | + const headersList = buildNgHeaderString( | ||
| 690 | + rawHeaders, | ||
| 684 | 691 | assertValidPseudoHeader, | |
| 685 | 692 | headers[kSensitiveHeaders], | |
| 686 | 693 | ); | |
| 687 | 694 | ||
| 688 | 695 | return { | |
| 696 | + rawHeaders, | ||
| 689 | 697 | headersList, | |
| 690 | 698 | scheme, | |
| 691 | 699 | authority: authority ?? headers[HTTP2_HEADER_HOST], | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -39,6 +39,16 @@ const http2 = require('http2'); | |||
| 39 | 39 | 'a', 'c', | |
| 40 | 40 | ]).end(); | |
| 41 | 41 | ||
| 42 | + assert.deepStrictEqual(req.sentHeaders, { | ||
| 43 | + '__proto__': null, | ||
| 44 | + ':path': '/foobar', | ||
| 45 | + ':scheme': 'http', | ||
| 46 | + ':authority': `localhost:${server.address().port}`, | ||
| 47 | + ':method': 'GET', | ||
| 48 | + 'a': [ 'b', 'c' ], | ||
| 49 | + 'x-FOO': 'bar', | ||
| 50 | + }); | ||
| 51 | + | ||
| 42 | 52 | req.on('response', common.mustCall((headers) => { | |
| 43 | 53 | assert.strictEqual(headers[':status'], 200); | |
| 44 | 54 | client.close(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -72,6 +72,16 @@ const { duplexPair } = require('stream'); | |||
| 72 | 72 | ||
| 73 | 73 | const req = client.request(rawHeaders); | |
| 74 | 74 | ||
| 75 | + assert.deepStrictEqual(req.sentHeaders, { | ||
| 76 | + '__proto__': null, | ||
| 77 | + ':method': 'GET', | ||
| 78 | + ':authority': 'localhost:80', | ||
| 79 | + ':scheme': 'http', | ||
| 80 | + ':path': '/', | ||
| 81 | + 'secret': 'secret-value', | ||
| 82 | + [http2.sensitiveHeaders]: [ 'secret' ], | ||
| 83 | + }); | ||
| 84 | + | ||
| 75 | 85 | req.on('response', common.mustCall((headers) => { | |
| 76 | 86 | assert.strictEqual(headers[':status'], 200); | |
| 77 | 87 | })); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments