wake-up-neo.com

wie funktioniert ein etag in expressjs

Expressjs senden automatisch etags. Ich würde gerne wissen, wie das Etag generiert wird. Es basiert auf dem Inhalt, der dynamisch von der Get-Routine generiert wird. Oder gibt es eine Möglichkeit, wie ich es verwalten kann, indem ich nicht einmal den Prozess des Erzeugens des Inhalts (dynamischer Inhalt - aus DB) durchlaufe und etag als denselben zurückgebe.

es kann sich um eine Middleware handeln, die zunächst nur überprüft, ob es sich um eine gültige Sitzungs-ID handelt, und dann das gleiche Etag zurückgibt, das der Client angibt, oder auf der URL + Sitzungs-ID basiert, sodass sie eindeutig ist. und beende die anfrage dort lieber durch den ganzen db call und all das zeug. In diesem Fall muss ich wissen, dass der Client einen 304-Anruf tätigt.

Ich könnte mit dem Verfallsdatum gehen. Aber wenn die Sitzung vorbei ist. Wenn jemand die URL öffnet, sollte dies nicht möglich sein. Daher denke ich, dass das etag auch auf der Sitzungs-ID basieren sollte. Wie funktioniert eine Änderung in diesem Szenario mit dynamischem Inhalt? kann es verwendet werden.

39
coool

Zum Zeitpunkt des Schreibens (8. Juli 2014) werden schwache ETags mit CRC32 ( Quelle ) und starke ETags mit MD5 ( Quelle generiert ).

Basierend auf dem, was einer der Mitwirkenden zu Express sagt , können Sie angeben, ob die starken oder schwachen ETags verwendet werden sollen:

app.enable('etag') // use strong etags
app.set('etag', 'strong') // same
app.set('etag', 'weak') // weak etags

Es sieht so aus, als ob Sie auch Ihre eigene benutzerdefinierte Funktion angeben können, um die ETags wie folgt auszuführen:

app.set('etag', function(body, encoding){ /* return valid etag */ });

Das NPM-Paket fresh ist ebenfalls einen Blick wert, da es in Express zur Frischeprüfung verwendet wird ( source1 , source2 ).

Denken Sie bei Ihrer Anwendung daran, dass Sie alle Antwortheader außer Kraft setzen können, z. res.set('etag', 'my-awesome-etag-value') vor dem Aufrufen von res.send() (oder einer ähnlichen Funktion). Weitere Diskussionen (einschließlich Vor- und Nachteilen) finden Sie hier: https://github.com/visionmedia/express/issues/2129#issue-34053148

41
stellarchariot