1 Star 0 Fork 0

zzy1661/BrowserCachePolicy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
cache.js 2.01 KB
一键复制 编辑 原始数据 按行查看 历史
Lucien 提交于 2016-06-06 07:54 . add etag
var config = require("./config.js");
var path = require("path");
var url = require("url");
var fs = require("fs");
var crypto = require('crypto');
module.exports = function (request, response, next) {
var pathname = url.parse(request.url).pathname;
var ext = path.extname(pathname);
ext = ext ? ext.slice(1) : 'unknown';
var realPath = path.join("assets", pathname);
if (ext.match(config.Expires.fileMatch)) {
var expires = new Date();
expires.setTime(expires.getTime() + config.Expires.maxAge * 1000);
response.setHeader("Expires", expires.toUTCString());
response.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge);
fs.stat(realPath, function (err, stat) {
var lastModified = stat.mtime.toUTCString();
var ifModifiedSince = "If-Modified-Since".toLowerCase();
response.setHeader("Last-Modified", lastModified);
fs.readFile(realPath, 'binary', function (err, file) { // 为了使代码简单,这是里与stat是串行读取, 同时与后面的next读取了文件两次可以优化
if (err) {
response.writeHead(500, { 'Content-Type': 'text/plain' });
return response.end(err);
} else {
var hash = crypto.createHash('md5').update(file).digest('base64');
response.setHeader("Etag", hash);
if (
(request.headers['if-none-match'] && request.headers['if-none-match'] === hash)
// ||
// (request.headers[ifModifiedSince] && new Date(lastModified) <= new Date(request.headers[ifModifiedSince]))
) {
response.writeHead(304, "Not Modified");
response.end();
return;
}
else {
next();
}
}
});
})
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/zzy1661/BrowserCachePolicy.git
git@gitee.com:zzy1661/BrowserCachePolicy.git
zzy1661
BrowserCachePolicy
BrowserCachePolicy
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385