var options = { dotfiles: ‘ignore’, etag: false, extensions: [‘htm’,‘html’,‘css’,‘png’,‘gif’,‘jpg’,‘js’,‘tpl’], index: true, maxAge: ‘3600000’, redirect: true, setHeaders: function (res, path, stat) { res.set(‘x-timestamp’, Date.now()) } }; app.use(express.static(path.join(__dirname, ‘public’),options));
如上,想把public目录下的一些静态资源放到浏览器缓存,减小服务器负担,提高加载速度,options里面的setHeaders这个属性是怎么使用的, 我想把Expires加到headers里 还有headers Expires 是否与max-age冲突,max-age会覆盖Expires?headers中还会不会有Expires? 这是respone的headers: Accept-Ranges:bytes Cache-Control:public, max-age=3600 Connection:keep-alive Date:Wed, 19 Nov 2014 06:28:24 GMT ETag:"3329-1416377484000" Last-Modified:Wed, 19 Nov 2014 06:11:24 GMT X-Powered-By:Express
如果把http gzip传输,动态压缩支持在nodejs,express中如何实现 ,借助插件?
ETag:"3329-1416377484000" 有了这个就已经被缓存了。并且EXPRESS会自动返回304。
nodejs有个模块,叫zlib,gzip可以靠它。
@MiguelValentine 3Q,我想知道里面的setHeaders,这个属性要怎么才能生效,关于gzip我想知道的是关于动态http压缩(这玩意是啥)的相关实现 o(╯□╰)o
@MiguelValentine:倒不用zlib,express启用gzip的话,用这个npm install compression,记得也是TJ写的。
@dulante:理论上开启gzip用来压缩服务器响应的文件流:文本,图片(不建议)都可以的。详情还是请自行科普吧。正所谓:努力学习靠自我,提问之前先搜索,哈哈。
@dulante 这个是NODEJS的原生方法 ,详见request.setHeader() api.
setHeader(k,v) => 会自动注册进某个requset内的数组或OBJ。 当writeHeader(),或者end()事件触发时(自动触发writeHeader()),这个数组将会被编码成响应头。 所以在writeHeader之后不能再次setHeader. req在EXPRESS中就是被修饰过的request.
@saionjisekai 自写模块性能高。
@dulante HTTP gzip 的动态实现。
1.res.render();不能再用了需要自己手动实现。
==>模块思路 声明最终写法。
function(req,res){
gzip(req,res,file);
};
gzip 就是我们需要写的模块 //首先file是语言引擎处理完毕的数据流 例子:file=jade.renderFile(filepath,config);
///gzip模块实例/部分伪代码
function gzip(req,res,file){
if(req.headers['accept-encoding'] && req.headers['accept-encoding'].indexof('gzip')!=-1){
var file = zip(file);
res.setHeader({'Content-Encoding':'gzip'});
res.setHeader({'Vary':'Accept-Encoding');
res.end(file);
}else{
res.end(file);
};
}
function zip(file){
return gzip.createGzip(file);
};
//可能实际运行中要改动,思路是这样。
@MiguelValentine 3Q 谢谢大牛!☺