node.js - 我应该使用什么编码来在 nodeJS 中正确生成带有加密的 ETag?

标签 node.js caching http-headers etag

在我的 nodeJS 应用程序中,我想为返回给客户端的所有内容生成 ETag。我需要 ETag 基于文件的实际内容而不是日期,以便跨不同 Node 进程的同一文件具有相同的 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 调用返回一个十六进制编码的缓冲区吗?如果是这样,这样做会影响返回给用户的内容吗?

最好,谢谢,
Sami

最佳答案

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

  • 相同的文档应该始终返回相同的 ETag
  • 文档中的任何更改都会导致 ETag 发生更改
  • ETag 数据应该适合 HTTP header

关于node.js - 我应该使用什么编码来在 nodeJS 中正确生成带有加密的 ETag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13327068/

相关文章:

php - 如果在 WordPress 中修改自 header

node.js - 即使使用 withCredential : true,axios 也无法随请求发送 cookie

node.js - 使用变量作为带有修饰符的 mongodb 中的键名

http-headers - Origin header 的存在是否意味着 CORS 请求

java - HeadersTooLargeException - 响应 header

php - 为时间敏感的图像覆盖 Gmail 图像缓存(或设置较短的时间限制)

node.js - 有没有一种简单的方法可以将 express 应用程序转换为 meteor?

javascript - Array.prototype.values() 未定义 - 在 NodeJS 环境中使用 Babel 转译 ES6

php - 如何将动态 (PHP) 网站存档为静态 HTML?

asp.net - 将DataTable存储在Cache中是否错误?