【问题标题】:how to Multiple HttpHeader(with same name) in ExpressJS如何在 Express JS 中使用多个 Http Header(同名)
【发布时间】:2016-04-12 09:04:29
【问题描述】:

我的 PHP 代码可以发送两个具有相同名称的标头,在 php 中的第二个参数用于替换或覆盖。但在 ExpressJS 中 res.header 不像 php 代码 PHP代码:

header("Link: <http://$prefetch_next_img>; rel=prefetch",false); 
header("Link: <http://$prefetch_next_img2>; rel=prefetch",false);  

http://us2.php.net/manual/en/function.header.php

ExpressJS(NodeJS):

res.header('Link','Fake Value');
res.header('Link','Only Send it'); // previous header replaced

【问题讨论】:

  • 只是好奇,为什么要发送多个同名标头?
  • 你这不可能
  • 你应该看看这个,它是用于cookie的,但我相信同样的过程适用于标题。试试看,请告诉我们! :) connecto.io/blog/… - 解决方案是简单地发送一个值数组,而不是一个一个地发送值。

标签: php node.js http express


【解决方案1】:

最终,您需要传递一个数组来为同一个标头设置多个值

res.header('Set-Cookie', ['foo', 'bar']);

查看response library的express我们可以看到以下例子:

/**
 * Set header `field` to `val`, or pass
 * an object of header fields.
 *
 * Examples:
 *
 *    res.set('Foo', ['bar', 'baz']);
 *    res.set('Accept', 'application/json');
 *    res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });
 *
 * Aliased as `res.header()`.
 *
 * @param {String|Object} field
 * @param {String|Array} val
 * @return {ServerResponse} for chaining
 * @public
 */

对代码的深入研究表明,这实际上只是节点response.setHeader() 的代理,格式相同

为隐式标头设置单个标头值。如果这个标题 已存在于待发送的标头中,其值将被替换。 如果您需要发送多个标头,请在此处使用字符串数组 同名。

response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 2016-02-29
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多