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.readFile16 進数でエンコードされたバッファーを返す呼び出しを取得する必要がありますか? その場合、ユーザーに返されるコンテンツに影響はありますか?

最高、そしてありがとう、
サミ

4

1 に答える 1

8

あなたはそれをうまくやっています。ファイルを特別な形式でエンコードする理由はなく、出力に 16 進数を使用することはかなり標準的です。大まかに言えば、要件は次のとおりです。

  • 同じドキュメントは常に同じ ETag を返す必要があります
  • ドキュメントを変更すると、ETag が変更されます
  • ETag データは HTTP ヘッダーにきちんと収まる必要があります
于 2012-11-11T04:50:49.090 に答える