diff --git a/lib/Server.js b/lib/Server.js index 7688da5dfc..6e407a55da 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -490,29 +490,7 @@ class Server { options.devMiddleware = {}; } - // normalize `headers` - if (typeof options.headers !== "undefined") { - const allHeaders = {}; - - if (Array.isArray(options.headers)) { - options.headers.forEach((header) => { - allHeaders[header.key] = header.value; - }); - options.headers = allHeaders; - } - - if (typeof options.headers === "function") { - const returnedHeaders = options.headers(); - - if (Array.isArray(returnedHeaders)) { - returnedHeaders.forEach((header) => { - allHeaders[header.key] = header.value; - }); - - options.headers = allHeaders; - } - } - } + // No need to normalize `headers` if (typeof options.historyApiFallback === "undefined") { options.historyApiFallback = false; @@ -1867,10 +1845,19 @@ class Server { headers = headers(req, res, this.middleware.context); } - // eslint-disable-next-line guard-for-in - for (const name in headers) { - res.setHeader(name, headers[name]); + const allHeaders = []; + + if (typeof headers === "object" && !Array.isArray(headers)) { + // eslint-disable-next-line guard-for-in + for (const name in headers) { + allHeaders.push({ key: name, value: headers[name] }); + } + headers = allHeaders; } + + headers.forEach((header) => { + res.setHeader(header.key, header.value); + }); } next();