
Bug: Variables from upstream Code Node are not resolved when concatenated in the URL field of an HTTP Request Node
快速结论:在 Dify 工作流中,当 HTTP Request 节点的 URL 字段拼接上游 Code 节点的输出变量时,变量未被解析,导致实际请求 URL 中保留了未替换的模板字符串(如 %7B%7B#code_node.repo_full_name#%7D%7D),最终引发 404 错误。优先排查变量选择器路径是否匹配、以及是否处于已发布(Published)模式。
问题场景
用户在 Dify 1.15.0 版本(Self Hosted Docker 部署)中创建了一个工作流:
- 先添加一个 Code Execution 节点,输出一个自定义变量(如
repo_full_name)。 - 再添加一个 HTTP Request 节点,并在 URL 字段中将上游 Code 节点的变量拼接在路径中(例如
http://example.com/api/v1/repos/{{#code_node.repo_full_name#}}/compare)。 - 运行时,变量未被替换,导致请求 URL 包含编码后的模板字符串。
报错原文
GET http://10.56.200.210:3000/api/v1/repos/%7B%7B#code_node.repo_full_name#}}/compare...
404 Not Found
原因分析
此问题被认为是 Dify 1.15.0 版本中一个影响多个节点类型的变量解析 Bug。HTTP Request 节点使用的变量替换机制({{#selector.path#}})在所有字段(URL、headers、params、body)中一致,但问题在于变量在 URL 编码应用之前 未被正确解析,导致节点接收到的仍是字面模板字符串。可能原因包括:
- 变量选择器的路径不匹配(例如节点 ID 不一致),导致引擎无法识别变量。
- 问题可能与运行模式(草稿预览 vs 已发布模式)有关,某些用户反馈变量在其中一种模式可以解析,另一种不行。
- 变量传播机制本身可能存在缺陷,导致上游节点的输出不能正确传递给下游节点。
环境排查
- Dify 版本:1.15.0(Docker 部署)
- 节点类型:Code Execution 节点 + HTTP Request 节点
- 确认 Code 节点的输出变量是否在运行日志中显示正确的值(即在 HTTP Request 节点执行前,Code 节点本身是否产生预期输出)。
- 确认 HTTP Request 节点配置中的变量选择器是否使用正确的路径格式(如
{{#节点ID.输出变量名#}})。 - 确认问题是否在草稿预览模式或已发布模式下复现(可两种模式都测试)。
解决步骤
- 验证变量选择器路径:在 HTTP Request 节点配置中,打开变量选择器/选择器(variable picker),确认 Code 节点的输出变量名称和节点 ID 是否正确显示。如果变量路径不匹配,重新选择变量。
- 测试运行模式:分别在草稿预览模式和已发布模式下运行工作流,观察变量解析是否一致。
- 插入中间节点:在 Code 节点和 HTTP Request 节点之间添加一个 Template Transform 节点,将 Code 节点的输出变量通过 Template Transform 节点传递,再供 HTTP Request 节点引用。这是临时绕过变量传播问题的常用方法。
- 检查是否有补丁版本:1.15.0 发布于 2026 年 6 月底,请检查是否有后续的补丁版本(如 1.15.1+)修复了此变量解析问题。如有,升级到最新版本。
验证方法
完成上述步骤后,重新运行工作流,检查 HTTP Request 节点的日志:
- 确认请求 URL 中不再出现
%7B%7B(即模板字符串已被替换为实际变量值)。 - 确认外部 API 返回 200 状态码而非 404。
- 在 Dify 工作流运行日志中确认 HTTP Request 节点的输入 URL 已经正确解析(例如应显示
http://example.com/api/v1/repos/user/demo/compare而非原始模板字符串)。



