参考cnodejs.org上面的静态服务器例子,写了下面的一个nodejs静态服务器例子,里面包含cache,压缩,贴代码如下:
var lastModified = stats.mtime.toUTCString();
var ifModifiedSince = \"If-Modified-Since\".toLowerCase();
response.setHeader(\"Last-Modified\", lastModified);
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);
}
if (request.headers[ifModifiedSince] && lastModified == request.headers[ifModifiedSince]) {
console.log(\"从浏览器cache里取\")
response.writeHead(304, \"Not Modified\");
response.end();
} else {
var raw = fs.createReadStream(realPath);
var acceptEncoding = request.headers[\'accept-encoding\'] || \"\";
var matched = ext.match(config.Compress.match);
if (matched && acceptEncoding.match(/\\bgzip\\b/)) {
response.writeHead(200, \"Ok\", {\'Content-Encoding\': \'gzip\'});
raw.pipe(zlib.createGzip()).pipe(response);
} else if (matched && acceptEncoding.match(/\\bdeflate\\b/)) {
response.writeHead(200, \"Ok\", {\'Content-Encoding\': \'deflate\'});
raw.pipe(zlib.createDeflate()).pipe(response);
} else {
response.writeHead(200, \"Ok\");
raw.pipe(response);
}
}
}
}
});
}
pathHandle(realPath);
});
server.listen(port);
console.log(\"http server run in port:\"+port);
本文地址:https://www.stayed.cn/item/12133
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我