Jira插件ScriptRunner Escalation Service POST请求持续返回缓存响应问题咨询
问题解答
确认是否获取缓存响应的方法
- 检查响应头缓存标识:调用
conn.getHeaderFields()获取全部响应头,重点查看Age、X-Cache、Cache-Control字段,若存在Age且数值大于0,或X-Cache返回HIT类标识,即可判定为缓存响应。 - 比对重复请求的响应特征:连续发送2次完全相同参数的POST请求,若返回内容不同但
Date响应头完全一致,可判定为拿到了缓存内容。 - 添加扰动参数测试:在POST参数中追加一个无业务含义的
_t参数,值为当前毫秒级时间戳,若修改参数后返回结果和JS调用结果一致,即可确认之前的异常结果由缓存导致。
避免获取缓存响应的配置方案
你当前代码中已设置conn.setUseCaches(false),该配置仅禁用了JVM层面的HttpURLConnection本地缓存,还需补充以下配置覆盖中间节点、服务端的缓存规则:
// 在原有请求头配置后追加以下缓存禁用头 conn.setRequestProperty("Cache-Control", "no-cache, no-store, must-revalidate"); conn.setRequestProperty("Pragma", "no-cache"); conn.setRequestProperty("Expires", "0");
如果允许调整请求参数,可固定追加上述提到的随机时间戳扰动参数,从请求特征层面规避所有缓存匹配规则。
JS调用未命中缓存的原因
通常由以下两种场景导致:
- 浏览器端JS发起请求时,会默认携带浏览器规范要求的缓存控制头,部分浏览器默认会给POST请求添加
no-cache类规则,和你Groovy代码的默认请求头配置不同,因此未触发缓存匹配。 - 服务端缓存策略按请求全量特征匹配,JS请求携带的
User-Agent、Origin、Cookie等头字段和Groovy请求不一致,未命中缓存规则,因此直接返回了最新的业务结果。
内容的提问来源于stack exchange,提问作者monty_bean
相关产品推荐
相关产品推荐

