Ich verwende Knoten und Express für das Back-End einer iOS-Anwendung. Daten werden in einer SQL Server-Datenbank gespeichert, sodass iOS-Apps den Server abfragen, der Server die Datenbank abfragt, der Server die DB-Antwort erhält und die Antwort dann an die iOS-Anwendung weiterleitet. Ich versuche herauszufinden, wie Caching funktioniert. Ich biete viele statische Inhalte an - Blogartikel zum Beispiel. Also habe ich geplant, Etags zu benutzen, aber ich bin mir nicht sicher, wie es funktionieren soll. Ich mache eine Anfrage, bekomme Inhalt und cache die Antwort auf der Client-Seite. OK. Dann mache ich dieselbe Anfrage später mit dem Etag der vorherigen Antwort, die in der 'If-None-Match'-Kopfzeile gespeichert ist. Dann was?Wie gebe ich 304 Unmodified Status mit Express.js zurück?
Handelt Express.js das automatisch? Es scheint nicht - ich konnte es nicht bekommen, um eine 304 Antwort zu erzeugen. Wenn ich versuche, die Antwortheader zu überprüfen, bevor ich die Antwort sende, bekomme ich null, daher kann ich die Etag einer Antwort nicht bekommen, bevor ich sie sende. Also wie soll ich das Anfrage-Etag mit dem Etag des Inhalts vergleichen, den der Server zurücksenden würde? Soll ich benutzerdefinierte generierte Etags verwenden und diese auf dem Server zwischenspeichern, um dann Anforderungs-Etags mit diesem Cache zu vergleichen?
Unten ist eine sehr einfache Route, die ich eingerichtet habe, um dies zu testen, keine Datenbank beteiligt. Ich sende nur eine Nummer an den Server, und es gibt das Quadrat zurück. Wenn ich eine Anfrage mit einem Etag an dieselbe URL sende, bekomme ich dieselbe Antwort. Ich kann den 'If-None-Match'-Header der Anfrage überprüfen, aber was soll ich vergleichen, um festzustellen, ob ich einen 304 anstelle eines 200 Status senden soll?
router.use("/square/:testId", function(req, res) {
var obj = {};
obj["testId"] = req.params.testId;
obj["result"] = req.params.testId * req.params.testId;
res.setHeader('Cache-Control', 'public, max-age=5');
var h2 = JSON.stringify(res.headers,null,2);
console.log("The response headers: " + h2);
//Prints null
res.status(200).send(obj);
});