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

生产环境中follow-redirects表现异常,返回ETag与404问题排查

解决follow-redirects生产环境随机404(ETag缓存导致)的方案

针对你遇到的生产环境随机出现重定向404且返回ETag的问题,核心思路是让目标服务每次都将你的请求识别为全新请求,跳过缓存校验。以下是几个直接可行的方案:

1. 强制禁用缓存请求头

直接在请求头中明确告知目标服务不要使用任何缓存,同时移除可能触发ETag校验的条件请求头:

const { https } = require('follow-redirects');

const requestOptions = {
  headers: {
    // 强制服务端不使用缓存
    'Cache-Control': 'no-cache, no-store, must-revalidate',
    'Pragma': 'no-cache',
    'Expires': '0',
    // 清空可能携带的ETag校验头,避免服务端匹配旧缓存
    'If-None-Match': '',
    'If-Modified-Since': ''
  }
};

https.get('你的目标重定向URL', requestOptions, (res) => {
  // 处理响应逻辑
}).on('error', (err) => {
  console.error('请求失败:', err);
});

2. 给请求URL添加唯一标识参数

通过在目标URL后追加随机值(比如时间戳、随机字符串),让每个请求的URL都独一无二,服务端会将其视为新请求,不会触发缓存匹配:

const { https } = require('follow-redirects');

const baseUrl = 'https://example.com/your-redirect-path';
// 追加时间戳确保URL唯一
const uniqueRequestUrl = `${baseUrl}?cache_bust=${Date.now()}`;

https.get(uniqueRequestUrl, (res) => {
  // 处理响应逻辑
});

3. 重定向过程中重置请求头

follow-redirects默认会在重定向时继承部分请求头,可能导致后续跳转请求携带了之前的缓存相关头。可以监听redirect事件,在每次跳转前重置关键头:

const { https } = require('follow-redirects');

const req = https.get('你的目标重定向URL', (res) => {
  // 处理响应逻辑
});

// 监听重定向事件,重置缓存相关头
req.on('redirect', (response, nextReqOptions) => {
  // 删除可能触发ETag校验的头
  delete nextReqOptions.headers['If-None-Match'];
  delete nextReqOptions.headers['If-Modified-Since'];
  // 强制添加禁用缓存的头
  nextReqOptions.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate';
});

补充说明

本地环境正常但生产出问题的原因通常是:生产环境存在CDN、反向代理等中间层缓存了ETag,或者目标服务在高并发场景下的缓存策略更严格;而本地请求直接对接目标服务,没有中间缓存,请求频率低也不会触发服务端的缓存校验逻辑。

内容的提问来源于stack exchange,提问作者Edd Chang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:50:29