文档首页/ 对象存储服务 OBS/ SDK参考/ Go/ 常见问题(Go SDK)/ 如何定位上传回调失败的问题?
更新时间:2026-07-10 GMT+08:00
分享

如何定位上传回调失败的问题?

工作原理

OBS 上传回调(Callback)允许在对象上传成功后,OBS 服务端自动向指定的回调 URL 发起 HTTP 请求。SDK 支持以下操作的上传回调:

SDK 通过 WithCallbackHeader 扩展参数将回调配置写入 x-obs-callback 请求头,OBS 收到后在上传完成时发起回调。

排查步骤

  1. 通过 HTTP 状态码确认回调是否失败。

    场景

    返回状态码

    说明

    上传成功 + 回调成功

    200

    正常,可读取 CallbackBody。

    上传成功 + 回调失败

    203

    对象已存储,但回调服务器返回非 200。

    上传失败

    err != nil

    上传本身失败,回调不会触发。

    当状态码为 203 时,对象已成功上传到 OBS,但回调失败,需按以下步骤继续排查。

  2. 检查回调 URL 是否可达。回调失败最常见的原因是 OBS 服务端无法访问回调 URL,请确认:

    • URL 必须是公网可访问的 HTTP/HTTPS 地址。
    • 回调服务器必须返回 200 状态码,否则 OBS 认为回调失败。

    验证方法: 使用 curl 从外部网络模拟回调请求。

    curl -X POST http://your-server.com/callback \  
        -H "Content-Type: application/json" \   
        -d '{"bucket":"test","key":"obj","etag":"abc"}' \  
        -v

    如果 curl 无法连通,说明回调服务不可达,需检查网络配置、防火墙规则或服务是否正常运行。

  3. 检查 CallbackUrl 是否经过 URL 编码。如果 URL 中包含特殊字符(如中文、空格、&、= 等),必须先进行 URL 编码,否则 OBS 服务端可能无法正确解析回调地址,导致回调失败。
  4. 检查回调服务器端的日志。如果回调 URL 可达但仍然失败,需查看回调服务器端的日志,常见问题包括:

    • 未正确处理数据: 服务端解析回调请求体时报错,例如未识别 $(bucket) 等模板变量替换后的格式。
    • 未返回响应体: 服务端处理成功但未返回响应内容,或返回了非 200 状态码。
    • 网络超时: 服务端处理耗时过长,导致 OBS 侧回调超时。

相关文档