You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:10:27