mirror of
https://github.com/nodejs/node.git
synced 2025-05-06 09:02:40 +00:00

Since headers are stored in an empty literal object ({}) instead of an object created with Object.create(null), care must be taken with property names inherited from Object. Currently there are only functions inherited, so we can safely check for existing strings instead. Fixes: https://github.com/nodejs/node/issues/4456 PR-URL: https://github.com/nodejs/node/pull/4460 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Minwoo Jung <jmwsoft@gmail.com>
59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
'use strict';
|
|
// Verify that the HTTP server implementation handles multiple instances
|
|
// of the same header as per RFC2616: joining the handful of fields by ', '
|
|
// that support it, and dropping duplicates for other fields.
|
|
|
|
var common = require('../common');
|
|
var assert = require('assert');
|
|
var http = require('http');
|
|
|
|
var srv = http.createServer(function(req, res) {
|
|
assert.equal(req.headers.accept, 'abc, def, ghijklmnopqrst');
|
|
assert.equal(req.headers.host, 'foo');
|
|
assert.equal(req.headers['www-authenticate'], 'foo, bar, baz');
|
|
assert.equal(req.headers['proxy-authenticate'], 'foo, bar, baz');
|
|
assert.equal(req.headers['x-foo'], 'bingo');
|
|
assert.equal(req.headers['x-bar'], 'banjo, bango');
|
|
assert.equal(req.headers['sec-websocket-protocol'], 'chat, share');
|
|
assert.equal(req.headers['sec-websocket-extensions'], 'foo; 1, bar; 2, baz');
|
|
assert.equal(req.headers['constructor'], 'foo, bar, baz');
|
|
|
|
res.writeHead(200, {'Content-Type' : 'text/plain'});
|
|
res.end('EOF');
|
|
|
|
srv.close();
|
|
});
|
|
|
|
srv.listen(common.PORT, function() {
|
|
http.get({
|
|
host: 'localhost',
|
|
port: common.PORT,
|
|
path: '/',
|
|
headers: [
|
|
['accept', 'abc'],
|
|
['accept', 'def'],
|
|
['Accept', 'ghijklmnopqrst'],
|
|
['host', 'foo'],
|
|
['Host', 'bar'],
|
|
['hOst', 'baz'],
|
|
['www-authenticate', 'foo'],
|
|
['WWW-Authenticate', 'bar'],
|
|
['WWW-AUTHENTICATE', 'baz'],
|
|
['proxy-authenticate', 'foo'],
|
|
['Proxy-Authenticate', 'bar'],
|
|
['PROXY-AUTHENTICATE', 'baz'],
|
|
['x-foo', 'bingo'],
|
|
['x-bar', 'banjo'],
|
|
['x-bar', 'bango'],
|
|
['sec-websocket-protocol', 'chat'],
|
|
['sec-websocket-protocol', 'share'],
|
|
['sec-websocket-extensions', 'foo; 1'],
|
|
['sec-websocket-extensions', 'bar; 2'],
|
|
['sec-websocket-extensions', 'baz'],
|
|
['constructor', 'foo'],
|
|
['constructor', 'bar'],
|
|
['constructor', 'baz'],
|
|
]
|
|
});
|
|
});
|