是否可以设置内容处理'没有'内容长度'?

时间:2014-06-08 12:27:46

标签: javascript node.js http express

我有一个简单的Express.js路线:

app.get('/db/csv', function (req, res) {
    db.users.find({}, { _id: 0 }, function (err, docs) {
        var csv = /* compute from docs */;

        res.setHeader('Content-disposition', 'attachment; filename=users.csv');
        res.send(csv);
    });
});

我使用此路线下载我的“用户”数据库的CSV版本。设置Content-disposition HTTP响应标头将在浏览器中触发“另存为...”对话框。

我还应该设置Content-Length标头吗?我在一个例子中看过它,我不确定这里是否需要它。如果需要,我如何从csv变量(这是一个JavaScript字符串)计算大小值?

(顺便说一下,浏览器中的功能没有Content-Length。)

2 个答案:

答案 0 :(得分:4)

不需要,只设置Content-Disposition就可以了。例如,RFC2616RFC6266中没有任何内容要求您合并它们。

  

如果需要,我如何从csv变量(这是一个JavaScript字符串)计算大小值?

不是,但这并不意味着包含它并不好。 :-)我还没有使用NodeJS做到这一点,但是我说要将其转换为具有适当编码的缓冲区(例如,您在charset中包含的编码)并获取缓冲区的大小(以字节为单位)。既然你要将该缓冲区作为内容发送,而缓冲区告诉你它有多大,那就应该是准确的。

答案 1 :(得分:1)

Content-Length和Content-Disposition是正交的。

如果您不发送Content-Length,则必须使用分块传输编码。 (通常,您的HTTP库将为您执行此操作)