ETag是资本标签。如不雅资本没有变更它就不会变。
- 客户端想断定缓存是否可用可以先获取缓存中文档的ETag,然后经由过程If-None-Match发送请求给Web办事器询问此缓存是否可用。
- 办事器收到请求,将办事器的中此文件的ETag,跟请求头中的If-None-Match比拟较,如不雅值是一样的,解释缓存照样最新的,Web办事器将发送304 Not Modified响应码给客户端表示缓存未修悛改,可以应用。
- 如不雅不一样则Web办事器将发送该文档的最新版本给浏览器客户端
- handleCache(req, res, filepath, statObj) {
- let ifModifiedSince = req.headers['if-modified-since'];
- let isNoneMatch = req.headers['is-none-match'];
- res.setHeader('Cache-Control', 'private,max-age=30');//max-age=30缓存内容将在30秒后掉效
- res.setHeader('Expires', new Date(Date.now() + 30 * 1000).toGMTString());
- let etag = statObj.size;
- let lastModified = statObj.ctime.toGMTString();
- res.setHeader('ETag', etag);//获取ETag
- res.setHeader('Last-Modified', lastModified);//办事器文件的最后修改时光
- //任何一个比较缓存头不匹配,则不走缓存
- if (isNoneMatch && isNoneMatch != etag) {//缓存过时
- return fasle;
- }
- if (ifModifiedSince && ifModifiedSince != lastModified) {//缓存过时
- return fasle;
- }
- //当请求中存在任何一个比较缓存头,则返回304,不然不走缓存
- if (isNoneMatch || ifModifiedSince) {//缓存有效
- res.writeHead(304);
- res.end();
- return true;
- } else {
- return false;
- }
- }
支撑gzip紧缩
设计思路
- let config = {
- host:'localhost' //提示用 ,
- port:8080 //办事器启动时刻的默认端标语,
- path:path.resolve(__dirname,'..','test-dir') //静态办事器启动时默认的工作目次
- }
浏览器都邑携带本身支撑的紧缩类型,最常用的两种是gzip和deflate。根据请求头Accept-Encoding,返回不合的紧缩格局.
推荐阅读
AICHAIN创始人段凯:AI+区块链 技术谱系极端的火花碰撞
全平易近充电节 | 3月26日~30日 2000位IT行业拭魅战专家邀请你一路充电进修!作为一门用于模仿、延长和扩大人的智能的理论、办法、技巧及应用体系的新技巧科学,人工智能在历经元年的新一轮火爆之后,应>>>详细阅读
本文标题:静态文件服务器实现的功能
地址:http://www.17bianji.com/lsqh/40859.html
1/2 1