I'm trying to set up server push with cloudflare, but they require multiple link
header fields to push multiple files. However, I can't find any documented way to include multiple header fields with the same key in node.js. I tried providing an array, but that just concatenates them together as the value for a single header field.
How do I set multiple http header fields with the same key in Node.js?
Asked Answered
express
You pass an array of values to res.header('HeaderName', arrayOfValues)
. Here's a working example and cURL output showing the duplicate response headers. This is not directly documented, but it does work ([email protected]).
const express = require('express')
const app = express()
app.get('/', (req, res, next) => {
res.header('Link', ['Link1', 'Link2'])
res.send()
})
app.listen(3000)
curl -v localhost:3000 output:
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Link: Link1
< Link: Link2
< Date: Fri, 09 Sep 2016 01:44:22 GMT
< Connection: keep-alive
< Content-Length: 0
node core http
Use res.setHeader(name, arrayOfValues)
const http = require('http')
const server = http.createServer(function (req, res) {
res.setHeader('Link', ['Link1b', 'Link2b'])
res.end()
})
server.listen(3000)
curl output:
< HTTP/1.1 200 OK
< Link: Link1b
< Link: Link2b
< Date: Fri, 09 Sep 2016 01:52:53 GMT
< Connection: keep-alive
< Content-Length: 0
Most likely different node versions. I would check your environment details very carefully. –
Hairball
Yeah, that was my first thought too, but that wasn't it. It turned out to be my browsersync proxy was for some reason doing the combining. I'm guessing whatever proxy method it's using re-interprets the header fields. Thanks for the help! –
Basle
FYI
res.header()
is an alias for res.set()
–
Rebarbative © 2022 - 2024 — McMap. All rights reserved.
Link: Link1b, Link2b
, yet when I ran the same server on a heroku test server they came up as separateLink
fields. Both servers are running node 5.2.0, so I'm not sure what's causing this odd behavior. – Basle