VP导航 VP导航
首页 提交网址

资讯文章 资讯 · NEWS

把条目状态推给对方:目录站的 Webhook 该怎么签、怎么重试

2026-10-24 约 1,424 字 预计阅读 4 分钟 yiyunkj

把条目状态推给对方:目录站的 Webhook 该怎么签、怎么重试 把

回调接口本质上是一个公开的 URL,谁都能往里发 POST。不加验证的话,任何人知道地址就能伪造一条"审核通过"的事件。

验证这件事有现成的规范可以照抄,不需要自己发明。

Webhook 的签名头、重试节奏与幂等要求

图片来源:网络,版权归原作者所有,侵权请联系删除

签名:三个头,签原始字节

目前比较通行的是 Standard Webhooks 那套,用三个请求头:webhook-id(事件唯一 ID)、webhook-timestamp(Unix 秒)、webhook-signature(形如 v1,签名)。

签名的计算方式是 HMAC-SHA256(密钥, "{id}.{timestamp}.{原始报文}"),三段用英文句点连接,结果做 base64。这四点上出错的最多:

  • 必须签原始报文。把 JSON 解析再重新序列化,键顺序和空格一变,哈希就对不上了。
  • 必须用常量时间比较。普通字符串相等比较会在第一个不同的字符处提前返回,这个时间差可以被用来逐字节试探。Python 用 hmac.compare_digest,Node 用 crypto.timingSafeEqual。
  • 必须校时间戳。签名只证明是谁发的,不证明是什么时候发的。容忍窗口通常取 5 分钟,超出直接拒绝。时间戳在签名串里面,攻击者改不动它。
  • 必须留轮转通道。签名头支持空格分隔多个签名,换密钥期间新旧两把都验,等对方都切过去了再停用旧的。

顺便一提,X- 前缀按 RFC 6648 早就废弃了,新接口别再往这个方向走。

幂等:ID 要稳定,别用内容哈希

重试一定会发生,所以接收方必须能安全地收两次。发送方要做的是给每个逻辑事件一个稳定的 ID,每次重试都带同一个。接收方记住处理过的 ID,再见到直接返回 2xx 但不重复处理。

ID 不能用报文内容哈希生成——两次不同的业务事件可能生成完全相同的报文。而接收方的去重记录要保存得比最大重试窗口更久,否则一天前的事件重放过来还是会被当新的处理一遍。

重试节奏要写进文档

哪些情况重试、重试几次、间隔多久,都要在接口文档里写清楚,因为接收方要靠这个决定去重记录留多久。

响应处理理由
2xx成功,不再重试对方已经收到
5xx、超时、网络错误退避重试对方暂时不可用
408、429退避重试,尊重 Retry-After对方明确说了什么时候再来
其他 4xx不重试,进死信队列对方拒绝了这份报文,重发也没用

退避用指数加抖动,典型节奏是 1 分钟、5 分钟、30 分钟、2 小时、12 小时、24 小时,六次左右收尾。全部失败之后进死信队列,同时给一个查询接口,让对方能自己查某次投递的状态并手动重放。

接收端的要求也要写清楚:几秒内返回 2xx,重活放到后面异步做。在自己的处理逻辑跑完才返回,很容易撞上发送方的超时,然后被判失败再重发一次。

对方填的 URL 是用户输入

这一条是发送方自己要防的:注册回调地址的是对方,他可以填一个内网地址,用你的投递服务去探测你的内网。这类服务端请求伪造的防护有三步——解析后屏蔽私有网段和链路本地地址(169.254.169.254 那个云元数据地址尤其要挡)、投递走独立的出口网段或代理、遇到重定向要重新校验一次目标地址,不然前面的检查会被一次 302 绕过。

报文内容也有取舍:塞完整资源方便对方,但一旦地址填错,数据就发到别人那里去了;只发一个 ID 让对方回来拉,安全些,代价是对方要多一次请求。涉及用户数据的事件建议用后者。

回调接口是给别人用的,文档里少写一句,对方就得多猜一次。把签名算法、重试节奏、幂等要求和超时约定写全,比事后在工单里解释划算得多。

本文标签 Webhook签名 回调幂等设计 目录站开放接口
← 上一篇 中国日报网 下一篇 → 服务器那层一直没人管:目录站的 SSH、fail2b

— 本文完 —

提交网址

发现好站,欢迎自荐收录

站内搜索

站点统计

  • 今日审核0
  • 已收录站点3744
  • 正常访问3738
  • 失联站点6
  • 累计访问175

网站分类

  • AI工具 0
    AI对话0 AI绘画0 AI写作0 AI编程0 AI音视频0 AI办公效率0
  • 开发编程 0
    前端开发0 后端开发0 移动开发0 开源与代码托管0 数据库0 开发文档与教程0
  • 设计素材 0
    UI设计0 图标素材0 免费图库0 字体下载0 配色工具0 设计模板0
  • 站长工具 0
    网站统计0 SEO工具0 域名与主机0 收录提交0 建站程序0 运维监控0
  • 学习教育 0
    编程教程0 语言学习0 职业技能0 公开课与慕课0 考试题库0 中小学教育0
  • 生活服务 0
    交通出行0 外卖点餐0 房产租房0 医疗健康0 政务办事0 快递物流0
  • 影音娱乐 0
    影视观看0 音乐音频0 游戏资源0 短视频直播0 小说阅读0
  • 电商购物 0
    综合商城0 比价工具0 导购返利0 二手交易0 团购优惠0
  • 综合其他 1
    实用工具0 资源合集0 小众站点0 个人博客0 论坛社区0
  • 新闻资讯 0
    科技资讯8 财经媒体1 行业动态0 社会热点0 综合门户0
  • 资讯文章 380

最新收录

  • rel=next/prev 早就不是
  • 服务器那层一直没人管:目录站的 SS
  • 把条目状态推给对方:目录站的 Web
  • 中国日报网
  • 装进容器之后,目录站多出来的那几个坑
  • 收录的站点改了名、换了域名:目录站的
  • 去抓对方网站的时候,那个超时到底该设
  • 收录了阿拉伯语站点之后:目录站的 R

浏览排行

  1. 满分作文网 6
  2. Let's Enhance 3
  3. 淘菜菜 3
  4. MasterClass 3
  5. TypeScript 中文网 3
  6. Zhengziying 3
  7. 得意生活 3
  8. 镇江网友之家 3

联系我们

bQ:12345678

电话:400-8888-888

邮箱:admin@example.com

时间:09:00-21:00

友情链接

车机屋·焊锡条·探兔AI导航·静电测试仪·大学生联盟

关于我们|广告合作|隐私条款|网站地图

原ICP备00000000号-1,@2026

由 Z-BlogPHP 驱动