1'use strict'; 2const common = require('../common'); 3const http = require('http'); 4const assert = require('assert'); 5 6{ 7 const server = http.createServer({ requireHostHeader: false }, common.mustCall((req, res) => { 8 res.writeHead(200); // Headers already sent 9 const headers = new globalThis.Headers({ foo: '1' }); 10 assert.throws(() => { 11 res.setHeaders(headers); 12 }, { 13 code: 'ERR_HTTP_HEADERS_SENT' 14 }); 15 res.end(); 16 })); 17 18 server.listen(0, common.mustCall(() => { 19 http.get({ port: server.address().port }, (res) => { 20 assert.strictEqual(res.headers.foo, undefined); 21 res.resume().on('end', common.mustCall(() => { 22 server.close(); 23 })); 24 }); 25 })); 26} 27 28{ 29 const server = http.createServer({ requireHostHeader: false }, common.mustCall((req, res) => { 30 assert.throws(() => { 31 res.setHeaders(['foo', '1']); 32 }, { 33 code: 'ERR_INVALID_ARG_TYPE' 34 }); 35 assert.throws(() => { 36 res.setHeaders({ foo: '1' }); 37 }, { 38 code: 'ERR_INVALID_ARG_TYPE' 39 }); 40 assert.throws(() => { 41 res.setHeaders(null); 42 }, { 43 code: 'ERR_INVALID_ARG_TYPE' 44 }); 45 assert.throws(() => { 46 res.setHeaders(undefined); 47 }, { 48 code: 'ERR_INVALID_ARG_TYPE' 49 }); 50 assert.throws(() => { 51 res.setHeaders('test'); 52 }, { 53 code: 'ERR_INVALID_ARG_TYPE' 54 }); 55 assert.throws(() => { 56 res.setHeaders(1); 57 }, { 58 code: 'ERR_INVALID_ARG_TYPE' 59 }); 60 res.end(); 61 })); 62 63 server.listen(0, common.mustCall(() => { 64 http.get({ port: server.address().port }, (res) => { 65 assert.strictEqual(res.headers.foo, undefined); 66 res.resume().on('end', common.mustCall(() => { 67 server.close(); 68 })); 69 }); 70 })); 71} 72 73{ 74 const server = http.createServer({ requireHostHeader: false }, common.mustCall((req, res) => { 75 const headers = new globalThis.Headers({ foo: '1', bar: '2' }); 76 res.setHeaders(headers); 77 res.writeHead(200); 78 res.end(); 79 })); 80 81 server.listen(0, common.mustCall(() => { 82 http.get({ port: server.address().port }, (res) => { 83 assert.strictEqual(res.statusCode, 200); 84 assert.strictEqual(res.headers.foo, '1'); 85 assert.strictEqual(res.headers.bar, '2'); 86 res.resume().on('end', common.mustCall(() => { 87 server.close(); 88 })); 89 }); 90 })); 91} 92 93{ 94 const server = http.createServer({ requireHostHeader: false }, common.mustCall((req, res) => { 95 const headers = new globalThis.Headers({ foo: '1', bar: '2' }); 96 res.setHeaders(headers); 97 res.writeHead(200, ['foo', '3']); 98 res.end(); 99 })); 100 101 server.listen(0, common.mustCall(() => { 102 http.get({ port: server.address().port }, (res) => { 103 assert.strictEqual(res.statusCode, 200); 104 assert.strictEqual(res.headers.foo, '3'); // Override by writeHead 105 assert.strictEqual(res.headers.bar, '2'); 106 res.resume().on('end', common.mustCall(() => { 107 server.close(); 108 })); 109 }); 110 })); 111} 112 113{ 114 const server = http.createServer({ requireHostHeader: false }, common.mustCall((req, res) => { 115 const headers = new Map([['foo', '1'], ['bar', '2']]); 116 res.setHeaders(headers); 117 res.writeHead(200); 118 res.end(); 119 })); 120 121 server.listen(0, common.mustCall(() => { 122 http.get({ port: server.address().port }, (res) => { 123 assert.strictEqual(res.statusCode, 200); 124 assert.strictEqual(res.headers.foo, '1'); 125 assert.strictEqual(res.headers.bar, '2'); 126 res.resume().on('end', common.mustCall(() => { 127 server.close(); 128 })); 129 }); 130 })); 131} 132