私はそうのような通常のHTMLレイアウトを単一ページのアプリケーションを設計しています:Node.jsのサーバー上でノードJS、ブラウザのキャッシュと304応答
<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>
:私は
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);
}
}
});
}
});
私は、私のChromeキャッシュをクリアした後、私のインデックスページとサーバー側をリフレッシュしています。画像。しかし、別の時間にインデックスページをリロードすると、リソースがないインデックスページだけが要求されます。ブラウザのコンソールでは、すべてが304でキャッシュからロードされます。これは正常な動作ですか?画像やリソースファイルに何らかの変更を加えると、mtimeはそれらの要求が送信されていないので比較できません。
また、私はSafari上で、キャッシュ、最後に変更された、etagヘッダーを設定した後でも、すべてのリソースが送信されていることに気付きました。これがどう動くべきか理解していないのですか、これはブラウザのものか、何か間違っているのでしょうか?