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
相关产品推荐
相关产品推荐

