Ich bin wie so eine einzelne Seite App mit einem normalen HTML-Layout-Gestaltung:Knoten js, Browser-Cache und 304 Antwort
<html>
<head>
<title>...</title>
<link rel="stylesheet" media="all" type="text/css" href="css/main.css">
...more meta tags
</head>
<body>
<!--body generated with templates-->
<script src="js/main.js"></script>
</body>
</html>
Auf dem node.js Server:
route.get(req, function(url, type, hdr) {
if (type === 'error') {
//response 404
}else if (type === 'page') {
console.log(url);
fileSys.stat(url, function(err, stat) {
if (err) {
res.statusCode = 404;
res.setHeader("Content-Type","text/plain");
res.write("404 Not Found");
res.end();
}else {
var file,
headers = {},
modif = req.headers['if-modified-since'];
if (modif && new Date(modif).getTime() === stat.mtime.getTime()) { //STATUS 304
headers = {
'Last-Modified': stat.mtime.toUTCString(),
'Date': new Date().toUTCString()
};
res.writeHead(304, headers);
res.end();
}else { //STATUS 200
if (path.extname(url) === '.jpg' || path.extname(url) === '.png')
file = fileSys.readFileSync(url);
else {
if (fileSys.statSync(url).isDirectory())
url += '/index.html';
file = fileSys.readFileSync(url, 'binary');
}
headers = {
'Last-Modified': stat.mtime.toUTCString(),
'Content-Length': stat.size,
'Cache-Control': 'public, max-age=31536000',
'ETag': url+'_'+stat.mtime.getTime(),
'Date': new Date().toUTCString()
};
var contentType = contentExtens[path.extname(url)];
if (contentType)
headers['Content-Type'] = contentType;
res.writeHeader(200, headers);
res.end(file);
}
}
});
}
});
Ich bin Ich arbeite mit dem Routing ohne Express und das Problem, auf das ich gestoßen bin, ist nach dem Löschen meines Chrome-Cache. Ich aktualisiere meine Indexseite und Serverseite. Ich protokolliere alle Anfragen, die die Indexseite, css, js, favicon und alle protokollieren die Bilder. Aber wenn ich die Indexseite ein anderes Mal neu lade, ist die einzige Anfrage, die kommt, für die Indexseite ohne ihre Ressourcen. Und in der Browser-Konsole ist alles 304 und wird aus dem Cache geladen. Ist das normales Verhalten? Wenn ich einige Änderungen an den Bildern oder irgendwelchen Ressourcendateien vornahm, kann ich die Zeit nicht vergleichen, da diese Anfragen nicht gesendet werden.
Auch ich habe auf Safari festgestellt, dass alle Ressourcen gesendet werden, auch nachdem der Cache, die letzten Änderungen und etag-Header gesetzt wurden. Verstehe ich nicht, wie das funktionieren soll, ist das eine Browser-Sache oder mache ich etwas falsch?