Javascript 设置“内容处置”而不设置“内容长度”是否可以接受?

Javascript 设置“内容处置”而不设置“内容长度”是否可以接受?,javascript,node.js,http,express,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');

我有一个简单的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版本。设置内容处置HTTP响应标头将触发浏览器中的“另存为…”对话框

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


顺便说一句,浏览器中的功能在没有内容长度的情况下工作。

这不是必需的,只需设置内容配置即可。例如,没有任何内容或要求您将它们组合在一起

如果需要,我将如何从csv变量(JavaScript字符串)计算大小值


事实并非如此,但这并不意味着包含以下内容是不好的:我还没有对NodeJS做过这样的操作,但是我想说的是,将它转换成具有适当编码的缓冲区,例如,您在字符集中包含的编码,并以字节为单位获取缓冲区的大小。因为您将要将该缓冲区作为内容发送,并且缓冲区会告诉您它有多大,这应该是准确的。

这不是必需的,只需设置内容配置就可以了。例如,没有任何内容或要求您将它们组合在一起

如果需要,我将如何从csv变量(JavaScript字符串)计算大小值


事实并非如此,但这并不意味着包含以下内容是不好的:我还没有对NodeJS做过这样的操作,但是我想说的是,将它转换成具有适当编码的缓冲区,例如,您在字符集中包含的编码,并以字节为单位获取缓冲区的大小。因为你要把缓冲区作为内容发送,缓冲区告诉你它有多大,这应该是准确的。

内容长度和内容配置是正交的


如果不发送内容长度,则必须使用分块传输编码。通常,您的HTTP库将为您执行此操作。

内容长度和内容配置是正交的


如果不发送内容长度,则必须使用分块传输编码。通常,您的HTTP库会为您执行此操作

我想如果没有内容长度,浏览器将无法提供下载进度百分比,因此将其设置为大文件是有意义的。是的。如果你能提供,那太好了。我已经添加了一个关于这方面的想法说明。啊,顺便说一句,RFC2616刚刚被一系列其他规格所取代:有趣!在这里,我注意到它是否说它被取代了:它没有,在上面的链接中。。。不过,从2011年开始,似乎有专门针对内容处置的RFC;我已经在上面链接过了。我想如果没有内容长度,浏览器将无法提供下载进度百分比,因此为大文件设置它是有意义的。是的。如果你能提供,那太好了。我已经添加了一个关于这方面的想法说明。啊,顺便说一句,RFC2616刚刚被一系列其他规格所取代:有趣!在这里,我注意到它是否说它被取代了:它没有,在上面的链接中。。。不过,从2011年开始,似乎有专门针对内容处置的RFC;我在上面链接了它。要计算字符串的字节长度,请使用:Buffer.byteLengthsData,[sEncoding]。sEndcoding默认为utf-8。要计算字符串的字节长度,请使用:Buffer.byteLengthsData,[sEncoding]。sEndcoding默认为utf-8。