6

在我的 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返回十六进制编码缓冲区的调用吗?如果是这样,这样做会影响返回给用户的内容吗?

最好的,谢谢,
萨米

4

1 回答 1

8

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

  • 同一个文档应该总是返回相同的 ETag
  • 文档中的任何更改都会导致 ETag 发生更改
  • ETag 数据应该整齐地放入 HTTP 标头中
于 2012-11-11T04:50:49.090 回答