| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 4b3b0e3 commit cc72584
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -583,6 +583,13 @@ class Http2ServerResponse extends Stream { | |||
| 583 | 583 | throw new ERR_HTTP2_HEADERS_SENT(); | |
| 584 | 584 | ||
| 585 | 585 | name = name.trim().toLowerCase(); | |
| 586 | + | ||
| 587 | + if (name === 'date') { | ||
| 588 | + this[kState].sendDate = false; | ||
| 589 | + | ||
| 590 | + return; | ||
| 591 | + } | ||
| 592 | + | ||
| 586 | 593 | delete this[kHeaders][name]; | |
| 587 | 594 | } | |
| 588 | 595 | ||
@@ -775,6 +782,7 @@ class Http2ServerResponse extends Stream { | |||
| 775 | 782 | const options = { | |
| 776 | 783 | endStream: state.ending, | |
| 777 | 784 | waitForTrailers: true, | |
| 785 | + sendDate: state.sendDate | ||
| 778 | 786 | }; | |
| 779 | 787 | this[kStream].respond(headers, options); | |
| 780 | 788 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2257,7 +2257,7 @@ function callStreamClose(stream) { | |||
| 2257 | 2257 | stream.close(); | |
| 2258 | 2258 | } | |
| 2259 | 2259 | ||
| 2260 | - function processHeaders(oldHeaders) { | ||
| 2260 | + function processHeaders(oldHeaders, options) { | ||
| 2261 | 2261 | assertIsObject(oldHeaders, 'headers'); | |
| 2262 | 2262 | const headers = ObjectCreate(null); | |
| 2263 | 2263 | ||
@@ -2274,9 +2274,12 @@ function processHeaders(oldHeaders) { | |||
| 2274 | 2274 | headers[HTTP2_HEADER_STATUS] = | |
| 2275 | 2275 | headers[HTTP2_HEADER_STATUS] | 0 || HTTP_STATUS_OK; | |
| 2276 | 2276 | ||
| 2277 | - if (headers[HTTP2_HEADER_DATE] === null || | ||
| 2278 | - headers[HTTP2_HEADER_DATE] === undefined) | ||
| 2279 | - headers[HTTP2_HEADER_DATE] = utcDate(); | ||
| 2277 | + if (options.sendDate == null || options.sendDate) { | ||
| 2278 | + if (headers[HTTP2_HEADER_DATE] === null || | ||
| 2279 | + headers[HTTP2_HEADER_DATE] === undefined) { | ||
| 2280 | + headers[HTTP2_HEADER_DATE] = utcDate(); | ||
| 2281 | + } | ||
| 2282 | + } | ||
| 2280 | 2283 | ||
| 2281 | 2284 | // This is intentionally stricter than the HTTP/1 implementation, which | |
| 2282 | 2285 | // allows values between 100 and 999 (inclusive) in order to allow for | |
@@ -2602,7 +2605,7 @@ class ServerHttp2Stream extends Http2Stream { | |||
| 2602 | 2605 | state.flags |= STREAM_FLAGS_HAS_TRAILERS; | |
| 2603 | 2606 | } | |
| 2604 | 2607 | ||
| 2605 | - headers = processHeaders(headers); | ||
| 2608 | + headers = processHeaders(headers, options); | ||
| 2606 | 2609 | const headersList = mapToHeaders(headers, assertValidPseudoHeaderResponse); | |
| 2607 | 2610 | this[kSentHeaders] = headers; | |
| 2608 | 2611 | ||
@@ -2668,7 +2671,7 @@ class ServerHttp2Stream extends Http2Stream { | |||
| 2668 | 2671 | this[kUpdateTimer](); | |
| 2669 | 2672 | this.ownsFd = false; | |
| 2670 | 2673 | ||
| 2671 | - headers = processHeaders(headers); | ||
| 2674 | + headers = processHeaders(headers, options); | ||
| 2672 | 2675 | const statusCode = headers[HTTP2_HEADER_STATUS] |= 0; | |
| 2673 | 2676 | // Payload/DATA frames are not permitted in these cases | |
| 2674 | 2677 | if (statusCode === HTTP_STATUS_NO_CONTENT || | |
@@ -2729,7 +2732,7 @@ class ServerHttp2Stream extends Http2Stream { | |||
| 2729 | 2732 | this[kUpdateTimer](); | |
| 2730 | 2733 | this.ownsFd = true; | |
| 2731 | 2734 | ||
| 2732 | - headers = processHeaders(headers); | ||
| 2735 | + headers = processHeaders(headers, options); | ||
| 2733 | 2736 | const statusCode = headers[HTTP2_HEADER_STATUS] |= 0; | |
| 2734 | 2737 | // Payload/DATA frames are not permitted in these cases | |
| 2735 | 2738 | if (statusCode === HTTP_STATUS_NO_CONTENT || | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,26 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + const common = require('../common'); | ||
| 3 | + if (!common.hasCrypto) { common.skip('missing crypto'); } | ||
| 4 | + const assert = require('assert'); | ||
| 5 | + const http2 = require('http2'); | ||
| 6 | + | ||
| 7 | + const server = http2.createServer(common.mustCall((request, response) => { | ||
| 8 | + response.sendDate = false; | ||
| 9 | + response.writeHead(200); | ||
| 10 | + response.end(); | ||
| 11 | + })); | ||
| 12 | + | ||
| 13 | + server.listen(0, common.mustCall(() => { | ||
| 14 | + const session = http2.connect(`http://localhost:${server.address().port}`); | ||
| 15 | + const req = session.request(); | ||
| 16 | + | ||
| 17 | + req.on('response', common.mustCall((headers, flags) => { | ||
| 18 | + assert.strictEqual('Date' in headers, false); | ||
| 19 | + assert.strictEqual('date' in headers, false); | ||
| 20 | + })); | ||
| 21 | + | ||
| 22 | + req.on('end', common.mustCall(() => { | ||
| 23 | + session.close(); | ||
| 24 | + server.close(); | ||
| 25 | + })); | ||
| 26 | + })); | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -114,6 +114,11 @@ server.listen(0, common.mustCall(function() { | |||
| 114 | 114 | response.sendDate = false; | |
| 115 | 115 | assert.strictEqual(response.sendDate, false); | |
| 116 | 116 | ||
| 117 | + response.sendDate = true; | ||
| 118 | + assert.strictEqual(response.sendDate, true); | ||
| 119 | + response.removeHeader('Date'); | ||
| 120 | + assert.strictEqual(response.sendDate, false); | ||
| 121 | + | ||
| 117 | 122 | response.on('finish', common.mustCall(function() { | |
| 118 | 123 | assert.strictEqual(response.headersSent, true); | |
| 119 | 124 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments