【问题标题】:How do I set multiple http header fields with the same key in Node.js?如何在 Node.js 中使用相同的键设置多个 http 标头字段?
【发布时间】:2017-01-16 19:15:21
【问题描述】:

我正在尝试设置server push with cloudflare,但它们需要多个link 标头字段来推送多个文件。但是,我找不到任何记录在案的方法来在 node.js 中包含具有相同键的多个标头字段。我尝试提供一个数组,但这只是将它们连接在一起作为单个标题字段的值。

【问题讨论】:

    标签: node.js http express http-headers server-push


    【解决方案1】:

    表达

    您将一组值传递给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
    

    节点核心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)
    

    卷曲输出:

    < 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 字段。两台服务器都运行节点 5.2.0,所以我不确定是什么导致了这种奇怪的行为。
    • 很可能是不同的节点版本。我会非常仔细地检查您的环境详细信息。
    • 是的,这也是我的第一个想法,但事实并非如此。原来是我的浏览器同步代理出于某种原因进行了组合。我猜它使用的任何代理方法都会重新解释标题字段。感谢您的帮助!
    • 仅供参考 res.header() 是 res.set() 的别名
    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多