我应该使用什么编码在nodeJS中正确生成带加密的ETag?

时间:2012-11-10 23:21:51

标签: node.js caching http-headers etag

在我的nodeJS应用程序中,我想为我返回给客户端的所有内容生成ETag。我需要ETag基于文件的实际内容而不是日期,以便跨不同节点进程的相同文件具有相同的ETag。

现在,我正在做以下事情:

var fs = require('fs'), crypto = require('crypto');
fs.readFile(pathToFile, function(err, buf){
  var eTag = crypto.createHash('md5').update(buf).digest('hex');
  res.writeHead(200, {'ETag': '"' + eTag + '"','Content-Type':contentType});
  res.end(buf);
});

我不确定我应该使用哪些编码来实现不同的加密功能,以便建立适当的系统。我应该使用hex以外的其他内容吗?我是否应该fs.readFile调用以返回十六进制编码缓冲区?如果是这样,会这样做会影响返回给用户的内容吗?

最好,谢谢,萨米

1 个答案:

答案 0 :(得分:8)

你做得很好。没有理由以任何特殊格式对文件进行编码,并且使用十六进制作为输出是非常标准的。松散地说,要求是:

  • 同一文件应始终返回相同的ETag
  • 文档中的任何更改都会导致ETag发生更改
  • ETag数据应该整齐地适合HTTP标头