Perilaku pengiriman
Diambil dari dokumentasi resmi vendor, terakhir diperiksa 2026-08-06. Jika vendor tidak menyebut angka, tabel ini juga tidak mencantumkannya.
| Batas waktu respons | 10 detik |
|---|---|
| Percobaan ulang | Tidak ada. GitHub tidak mengirim ulang pengiriman yang gagal secara otomatis |
| Berhenti mencoba | Tidak ada penonaktifan. Pengiriman tetap dapat dikirim ulang secara manual selama 3 hari, lalu catatannya hilang |
| Sumber | https://docs.github.com/en/webhooks/using-webhooks/best-practices-for-using-webhooks |
Tanda tangan
Diverifikasi dengan verifier yang berfungsi dan dibuktikan oleh test suite, bukan dibaca dari dokumentasi. Terakhir diverifikasi 2026-08-20.
| Algoritma | HMAC-SHA256 |
|---|---|
| Payload bertanda tangan | raw body |
| Encoding | hex |
| Header | x-hub-signature-256 = sha256=hex |
| Toleransi | tidak diberlakukan |
Verifikasi
Raw body dari permintaan, byte demi byte, sebelum parsing JSON apa pun. Setiap skema di halaman ini rusak begitu framework melakukan serialisasi ulang pada payload.
const crypto = require("node:crypto");
// x-hub-signature-256: "sha256=" + hex(HMAC-SHA256(secret, raw body))
const expected =
"sha256=" +
crypto.createHmac("sha256", webhookSecret).update(rawBody).digest("hex");
const received = Buffer.from(req.headers["x-hub-signature-256"] ?? "");
const wanted = Buffer.from(expected);
// timingSafeEqual throws on a length mismatch, so check that first.
const valid =
received.length === wanted.length && crypto.timingSafeEqual(received, wanted);Yang sering menjebak
Anda hanya mendapat satu upaya. Setiap pengirim lain di daftar ini mencoba ulang dengan sendirinya; GitHub tidak, jadi deploy yang memakan 30 detik membuat event hilang tanpa kesempatan kedua. Tombol Redeliver (begitu pula Redelivery API) bekerja per pengiriman, secara manual, selama 3 hari; setelah itu catatannya sendiri hilang.
Baca juga
AnyHook berada di depan endpoint yang menerima webhook dari GitHub: AnyHook menjawab dalam sekitar satu detik, mencoba ulang sesuai jadwalnya sendiri saat server Anda mati, dan menyimpan setiap event agar dapat diputar ulang (replay). Ganti satu URL, kode Anda tetap.