【问题标题】:Cant set Content-Disposition on Firebase function reponse无法在 Firebase 函数响应中设置 Content-Disposition
【发布时间】:2019-10-24 02:25:08
【问题描述】:

我有一个函数可以像这样发送.xlsx 文件:

res.writeHead(200, {
    "Content-Disposition": "attachment;filename=" + file.metadata.metadata.displayName,
    'Content-Type': 'vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    'Content-Length': buffer.length,
    'Access-Control-Expose-Headers': 'Content-Disposition'
});
res.end(buffer);

但是,Content-Disposition 标头似乎不起作用。如果我检查 Chrome DevTools 网络选项卡并查看请求的详细信息,则没有 Content-Disposition 标头(尽管存在 Access-Control-Expose-Headers)。

这是 Firebase 功能的限制吗?还是我做错了什么?

此外,如果我在本地托管函数(使用 firebase serve --only functions),它也可以工作。

谢谢!

【问题讨论】:

  • 我有一个问题,您是否尝试在发送到标题之前打印“file.metadata.metadata.displayName”?
  • 对,我也想到了,有预期值。我还尝试将所有标题打印到控制台,它们都有预期的值。
  • 奇怪的是我创建的另一个函数只是为了测试,它只是发送与我在问题中的函数相同的标题,工作正常。发送所有标头,包括内容处置...

标签: firebase google-cloud-functions


【解决方案1】:

我想通了。根据RFC 2183 Section 2.3,似乎 Content-Disposition 不能包含特殊字符

当前 [RFC 2045] 语法限制参数值(因此 Content-Disposition 文件名)到 US-ASCII。

一些浏览器不关心它,如果标头参数中有特殊字符,它们会正常工作,但由于请求和响应通过 Firebase,它们可能会进行某种过滤,并且不允许特殊字符在头参数。

【讨论】:

  • ty 分享 stackoverflow.com/a/54346022/1410503)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2011-11-19
  • 2018-10-30
  • 2017-10-10
  • 2010-11-03
  • 1970-01-01
相关资源
最近更新 更多