Nodejs 请教一下关于express浏览器缓存的问题

Nodejs 请教一下关于express浏览器缓存的问题

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中如何实现 ,借助插件?


3 回复

Node.js 请教一下关于Express浏览器缓存的问题

问题描述

在使用Express框架时,希望利用浏览器缓存来减轻服务器负担并提高加载速度。目前配置了express.static中间件,并尝试通过设置响应头来控制缓存策略。

示例代码及解释

const express = require('express');
const path = require('path');

const app = express();

var options = {
    dotfiles: 'ignore',
    etag: false,
    extensions: ['htm', 'html', 'css', 'png', 'gif', 'jpg', 'js', 'tpl'],
    index: true,
    maxAge: '3600000', // 1小时缓存
    redirect: true,
    setHeaders: function (res, path, stat) {
        res.set('Cache-Control', 'public, max-age=3600'); // 设置 Cache-Control 头
        res.set('Expires', new Date(Date.now() + 3600000).toUTCString()); // 设置 Expires 头
        res.set('x-timestamp', Date.now());
    }
};

app.use(express.static(path.join(__dirname, 'public'), options));

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

关于setHeaders的使用

在上述代码中,setHeaders函数用于自定义响应头。我们在这里添加了Cache-ControlExpires两个头部字段。这两个头部字段可以协同工作,但通常推荐使用Cache-Control,因为它是HTTP/1.1标准的一部分,而Expires是HTTP/1.0的标准。如果同时设置了Cache-ControlExpiresCache-Control会优先被浏览器采用。

Gzip 动态压缩支持

为了启用Gzip压缩,可以使用第三方库如compression。以下是如何安装和使用该库:

npm install compression --save

然后在你的Express应用中引入它:

const compression = require('compression');

app.use(compression()); // 在所有路由之前使用此中间件

这样,Express将自动对符合条件的响应进行Gzip压缩。

总结

通过上述配置,你可以有效地控制浏览器缓存策略,并启用Gzip动态压缩,从而优化你的Node.js应用性能。


ETag:"3329-1416377484000" 有了这个就已经被缓存了。并且EXPRESS会自动返回304。

nodejs有个模块,叫zlib,gzip可以靠它。

在Express应用中,配置浏览器缓存可以通过设置HTTP响应头来实现。你提到的setHeaders方法可以用来自定义这些响应头。

如何添加Expires头

如果你想在响应头中添加Expires字段,可以通过修改setHeaders函数来实现。ExpiresCache-Control:max-age不是完全冲突的,但根据HTTP标准,Cache-Control具有更高的优先级。如果你同时设置了max-ageExpires,那么Cache-Control将覆盖Expires

示例代码如下:

const express = require('express');
const path = require('path');

const app = express();

const options = {
    dotfiles: 'ignore',
    etag: false,
    extensions: ['htm', 'html', 'css', 'png', 'gif', 'jpg', 'js', 'tpl'],
    index: true,
    maxAge: '3600000', // 3600000ms = 1 hour
    redirect: true,
    setHeaders: function (res, path, stat) {
        res.set('Cache-Control', 'public, max-age=3600'); // 设置Cache-Control头
        res.set('Expires', new Date(Date.now() + 3600 * 1000).toUTCString()); // 添加Expires头
        res.set('x-timestamp', Date.now());
    }
};

app.use(express.static(path.join(__dirname, 'public'), options));

app.listen(3000, () => {
    console.log('Server running on port 3000');
});

HTTP GZIP压缩

为了启用HTTP GZIP压缩,你可以使用第三方中间件,如compression。安装这个模块后,你可以轻松地为你的Express应用添加GZIP压缩支持。

安装compression:

npm install compression --save

然后,在你的应用中引入并使用它:

const compression = require('compression');

// 在所有路由之前使用compression中间件
app.use(compression());

这会在响应体被发送到客户端之前进行GZIP压缩,从而减少数据传输量,提高加载速度。

回到顶部