-
Notifications
You must be signed in to change notification settings - Fork 29.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
http: process 100, 102-199 according to specs.
Adding ServerResponse.writeProcessing to send 102 status codes. Added an `'information'` event to ClientRequest to handle 1xx status codes except 101 Upgrade. 101 Upgrade is excluded due to its non-informational processing according to RFC7231, Section 6.2.2. This affects several modules downstream that use the http module, e.g., node-fetch, all of whom violate HTTP RFCs due to this module. As such, this could introduce a breaking change for downstream if HTTP standards were ignored in an ad-hoc fashion. See also RFC2518 RFC8297. PR-URL: #18033 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Tiancheng "Timothy" Gu <[email protected]>
- Loading branch information
Showing
4 changed files
with
118 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
'use strict'; | ||
require('../common'); | ||
const assert = require('assert'); | ||
const http = require('http'); | ||
const Countdown = require('../common/countdown'); | ||
|
||
const test_res_body = 'other stuff!\n'; | ||
const countdown = new Countdown(3, () => server.close()); | ||
|
||
const server = http.createServer((req, res) => { | ||
console.error('Server sending informational message #1...'); | ||
res.writeProcessing(); | ||
console.error('Server sending informational message #2...'); | ||
res.writeProcessing(); | ||
console.error('Server sending full response...'); | ||
res.writeHead(200, { | ||
'Content-Type': 'text/plain', | ||
'ABCD': '1' | ||
}); | ||
res.end(test_res_body); | ||
}); | ||
|
||
server.listen(0, function() { | ||
const req = http.request({ | ||
port: this.address().port, | ||
path: '/world' | ||
}); | ||
req.end(); | ||
console.error('Client sending request...'); | ||
|
||
let body = ''; | ||
|
||
req.on('information', function(res) { | ||
console.error('Client got 102 Processing...'); | ||
countdown.dec(); | ||
}); | ||
|
||
req.on('response', function(res) { | ||
assert.strictEqual(countdown.remaining, 1, | ||
'Full response received before all 102 Processing'); | ||
assert.strictEqual(200, res.statusCode, | ||
`Final status code was ${res.statusCode}, not 200.`); | ||
res.setEncoding('utf8'); | ||
res.on('data', function(chunk) { body += chunk; }); | ||
res.on('end', function() { | ||
console.error('Got full response.'); | ||
assert.strictEqual(body, test_res_body); | ||
assert.ok('abcd' in res.headers); | ||
countdown.dec(); | ||
}); | ||
}); | ||
}); |