在Node.js中如何设置具有相同键的多个http头字段?

8
我正尝试使用CloudFlare进行服务器推送设置,但他们要求多个link头字段以推送多个文件。然而,在Node.js中,我无法找到任何文档化的方法来包含具有相同键的多个头字段。我尝试提供一个数组,但那只是将它们连接在一起作为单个头字段的值。
1个回答

11

express

你可以通过res.header('HeaderName', arrayOfValues)方法传递一个值数组。下面是一个工作示例和cURL输出,展示了重复的响应头信息。虽然这个方法没有直接被记录在文档中,但它确实是有效的(express@4.14.0)。

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 输出:

< 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核心HTTP

使用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 输出:

< HTTP/1.1 200 OK
< Link: Link1b
< Link: Link2b
< Date: Fri, 09 Sep 2016 01:52:53 GMT
< Connection: keep-alive
< Content-Length: 0

谢谢,我确实尝试过了,但奇怪的是在我的本地机器上,标题出现为逗号分隔的值,例如 Link: Link1b, Link2b,然而当我在Heroku测试服务器上运行相同的服务器时,它们出现为单独的 Link 字段。两个服务器都在运行node 5.2.0,所以我不确定是什么原因导致这种奇怪的行为。 - TimE
很可能是不同的节点版本。我会非常仔细地检查您的环境详细信息。 - Peter Lyons
是的,那也是我的第一反应,但事实并非如此。原来是我的浏览器同步代理以某种原因进行了合并。我猜测它使用的任何代理方法都会重新解释头字段。感谢您的帮助! - TimE
FYI,res.header()res.set()的别名。 - galki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接