如何用ExpressJS和NodeJS实现短链接访问追踪并规避浏览器缓存?
解决短链接访问追踪失效的问题
你遇到的问题是301永久重定向的浏览器缓存机制导致的。301响应会让浏览器把短链接和目标链接的映射关系永久缓存,之后用户再次访问该短链接时,浏览器直接从本地缓存跳转,根本不会再请求你的Node.js后端,自然没法执行统计逻辑。
方案1:改用302临时重定向
把代码里的301重定向改成302,浏览器不会缓存这个重定向关系,每次访问都会先请求后端:
// 替换原重定向代码 return res.redirect(302, shortenedUrl.source); // 或者直接用默认的302,省略状态码 return res.redirect(shortenedUrl.source);
方案2:保留301但禁用缓存
如果因为SEO等原因必须用301,就在重定向之前添加禁止缓存的响应头,强制浏览器每次都请求后端:
const shortenedUrl = await ShortenedUrl.findOne({ urlCode: code }).exec(); // 添加缓存控制头,禁止浏览器缓存重定向结果 res.set('Cache-Control', 'no-cache, no-store, must-revalidate'); res.set('Pragma', 'no-cache'); res.set('Expires', '0'); // 执行访问统计逻辑(示例) await ClickStat.create({ urlCode: code, accessedAt: new Date(), userAgent: req.headers['user-agent'], ip: req.ip }); // 再执行重定向 return res.redirect(301, shortenedUrl.source);
补充:访问统计关键数据提取
从req对象中可以获取需要的统计字段:
- 访问时间:
new Date() - 浏览器/设备信息:
req.headers['user-agent'] - 用户真实IP:如果应用部署在反向代理后,需要先配置
app.set('trust proxy', true),再通过req.ip获取
内容的提问来源于stack exchange,提问作者Vicente Gutiérrez
相关产品推荐
相关产品推荐

