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

Kraken多后端场景下,如何将首个后端响应头传递至后续后端?

Kraken多后端传递响应头到后续请求的实现方案

你的问题核心是对modifier/lua-backend的操作范围理解有误:在第一个后端的post阶段调用request.load(),获取的是当前后端的请求实例,修改它不会对后续后端的请求产生影响。要实现跨后端传递数据,需要借助Kraken的全局共享存储来中转信息,具体步骤如下:

步骤1:第一个后端的post阶段存储响应头到全局上下文

在第一个后端的modifier/lua-backend的post步骤中,读取响应头并将其存入全局共享存储:

-- 加载当前后端的响应对象
local resp = response.load()
-- 从响应头中提取需要的字段
local x_user = resp:headers('user_id')
local x_org = resp:headers('org_id')
-- 将值存入全局共享存储,key需保证在请求生命周期内唯一
kraken:set('trans_x_user', x_user)
kraken:set('trans_x_org', x_org)

步骤2:第二个后端的pre阶段从全局上下文读取并添加请求头

给第二个后端添加modifier/lua-backend的pre步骤,从全局存储中取出值并添加到当前后端的请求头:

-- 从全局存储中读取之前保存的字段
local x_user = kraken:get('trans_x_user')
local x_org = kraken:get('trans_x_org')

-- 加载当前后端的请求对象,添加请求头
local req = request.load()
if x_user then
    req:headers('x-user', x_user)
end
if x_org then
    req:headers('x-org', x_org)
end

注意事项

  • 确保第二个后端的input_headers配置已经包含x-user和x-org,你已经完成这一步,无需额外修改。
  • kraken:set()和kraken:get()的作用域是单个请求的生命周期,不同请求之间不会互相干扰,无需担心数据污染。
  • 若后续还有更多后端,只需在对应后端的pre阶段重复步骤2的逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:45:29