2012-11-10 7 views
5

Nella mia app nodeJS, mi piacerebbe generare ETags per tutto il contenuto che restituisco al client. Ho bisogno del ETag da base al largo il contenuto effettivo del file invece che la data, in modo che lo stesso file attraverso diversi processi di nodo ha lo stesso ETag.Quale codifica dovrei usare per generare correttamente un ETag con crypto in nodeJS?

In questo momento, sto facendo il seguente:

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); 
}); 

Non sono sicuro di quello che codifiche dovrei utilizzare per le diverse funzioni crittografiche al fine di avere un sistema adeguato a posto. Dovrei usare qualcosa di diverso da hex? Devo ricevere la chiamata fs.readFile per restituire un buffer con codifica esadecimale? In tal caso, ciò influirà sul contenuto restituito agli utenti?

migliore, e grazie,
Sami

+1

Questo può aiutare: http://stackoverflow.com/q/4533 –

risposta

7

si sta facendo bene. Non c'è alcuna ragione per codificare il file in qualsiasi formato speciale, e l'utilizzo di esadecimale per l'uscita è abbastanza standard. I requisiti, in senso lato, sono:

  • lo stesso documento deve sempre restituire lo stesso ETag
  • eventuali modifiche nel documento provoca un cambiamento di ETag
  • i dati ETag dovrebbero inserire ordinatamente in un header HTTP
+0

Non ho idea di quanto sia veloce l'implementazione dell'hash di node.js - è necessario misurarlo per conto proprio. Se il tempo di generare l'hash è troppo lungo, si potrebbe pensare sulla memorizzazione nella cache il nome del file, data di modifica, e hash da qualche parte in modo che non sempre è necessario ricalcolare queste cose. – slashingweapon