A2A HTTP+JSON 绑定怎么配:代理卡端点与调用验证

A2A 的 HTTP+JSON 绑定,核心只有一件事:让代理卡(Agent Card)里声明的端点地址,真正能接收符合 A2A 消息格式的 POST JSON 请求,并返回任务状态。
配置是否正确,不靠看文档判断,靠一次实际请求验证。

下面按“先定端点、再写服务、最后联调”的顺序说明。
适合已经有一张 Agent Card、准备接入 HTTP 传输的代理服务,不涉及从零实现整个 A2A 协议栈。

先确认代理卡里的端点声明

A2A 代理卡用 JSON 描述代理身份和通信方式。
HTTP+JSON 绑定下,需要关注两个字段:

  • url:客户端实际 POST 的地址,必须是完整可访问 URL,例如 https://agent.example.com/a2a。
  • protocolBinding 或传输声明:标明使用 HTTP+JSON,不同实现字段名可能略有差异,以你使用的 SDK 或规范版本为准。

一个最小化的端点声明示意:

{
  "name": "demo-agent",
  "url": "https://agent.example.com/a2a",
  "protocolBinding": "HTTP+JSON",
  "capabilities": {}
}

易错点:url 不要写成相对路径,也不要带尾部斜杠后又在服务端做重定向。
客户端通常不会跟随 301/302 重新 POST,容易表现为 404 或空响应。

服务端要处理的请求格式

HTTP+JSON 绑定要求客户端以 Content-Type: application/json 发送 POST 请求,请求体至少包含任务消息。
不同 A2A 版本字段结构可能不同,但联调时可以先抓一个最小请求体:

{
  "jsonrpc": "2.0",
  "id": "req-001",
  "method": "message/send",
  "params": {
    "message": {
      "role": "user",
      "parts": [{ "type": "text", "text": "你好" }]
    }
  }
}

如果你的实现不是 JSON-RPC 风格,而是直接 POST 任务对象,则以实际 SDK 为准。
关键是服务端路由要能解析这个 JSON,并返回 JSON 响应,而不是 HTML 错误页。

服务端路由注册示例(以常见 Web 框架伪代码表示,路径与你的代理卡 url 保持一致):

POST /a2a  ->  a2a_handler
Content-Type 必须为 application/json

处理函数里先读取请求体,校验 message 字段是否存在,再交给代理业务逻辑。
不要在这一层做重定向或返回 204 空响应,否则客户端拿不到任务状态。

用 curl 验证绑定是否生效

配置完成后,不要直接接客户端,先用 curl 发一次请求。
把地址换成你代理卡里的 url:

curl -i -X POST 'https://agent.example.com/a2a' \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"req-001","method":"message/send","params":{"message":{"role":"user","parts":[{"type":"text","text":"ping"}]}}}'

预期结果是 HTTP 200 或 202,响应体为 JSON,包含任务 ID 或消息回执。
如果返回 404,说明路径没对上;
返回 415,说明服务端没接受 application/json;
返回 422 或 400,通常是请求体字段缺失。

验证通过的标准:状态码在 2xx,响应 Content-Type 为 JSON,且响应体里能看到与请求 id 对应的结果或任务标识。
三者缺一,都不算绑定完成。

联调时最容易踩的三个坑

第一个坑是代理卡 url 和实际路由不一致。
改完服务端路径后忘了同步更新代理卡,客户端仍请求旧地址。
排查时直接看代理卡 JSON 里的 url,再对照服务端访问日志。

第二个坑是反向代理截断了请求体。
Nginx 默认 client_max_body_size 可能偏小,消息体较大时返回 413。
可以在对应 location 中调大限制并重载:

location /a2a {
    client_max_body_size 10m;
    proxy_pass http://127.0.0.1:8080;
}

第三个坑是服务端把 JSON 解析错误包装成 500。
联调阶段建议在服务端日志中记录原始请求体长度和解析异常,但不要记录完整敏感内容。
看到 500 时先查应用日志,而不是反复改客户端。

配置完成后的复查清单

  • 代理卡 url 是完整 HTTPS 地址,且与服务端路由一致。
  • 服务端只接受 POST,并正确解析 application/json。
  • curl 请求返回 2xx 且响应体为 JSON。
  • 反向代理没有改写路径或拦截请求体。
  • 客户端使用的端点来自代理卡,而不是硬编码的另一份地址。

如果以上都通过,HTTP+JSON 绑定基本可用。
后续再接入真实客户端时,保持同一份代理卡和同一套请求格式,就能减少环境差异带来的问题。

分享到:
上一篇
A2A 代理如何绑定 JSON-RPC 端点并完成联调
下一篇
A2A 与 MCP、OpenAPI、gRPC 的适用场景对比
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意