ID formulir

Cara kerja

Setiap pemeriksaan yang dilalui sebuah kiriman, secara berurutan, dan apa yang bisa dikembalikan masing-masing.

Setiap kiriman ke /f/<formId> melewati pipeline yang sama. Pemeriksaan yang ringan berjalan lebih dulu, jadi banjir request atau formulir yang tidak dikenal hampir tidak memakan biaya. Pemeriksaan pertama yang gagal menentukan responsnya.

Pemeriksaan yang dilalui sebuah kiriman, secara berurutan

Sebelum body dibaca

  1. 1Proteksi flood600 per menit per IP, di semua formulir429 rate_limited
  2. 2Pencarian formulirFormulir yang tidak dikenal, dihapus, atau dinonaktifkan404 not_found
  3. 3Rate limit formulirPreset formulir, per pengunjung dan per formulir429 rate_limited
  4. 4DijedaFormulir dijeda di dashboard403 form_paused

Membaca kiriman

  1. 5Parsingurlencoded, multipart, atau JSON, UTF-8, batas ukuran400, 413, 415, atau 422
  2. 6Kunci APIHanya jika header Authorization dikirim403 forbidden
  3. 7Domain yang diizinkanOrigin atau Referer dicocokkan dengan domain formulirSpam, atau 403
  4. 8Pemeriksaan manusiaToken Turnstile, saat pemeriksaan aktif403, atau halaman pemeriksaan

Menilai kiriman

  1. 9ValidasiTerhadap field yang dipublikasikan, jika ada422 validation_failed
  2. 10SkorHoneypot, waktu, tautan, kata kunci, duplikatSpam di 5 atau lebih
  3. 11IdempotensiKey yang sama mengembalikan jawaban pertama lagiReplay, 409, atau 422
  4. 12Pemakaian bulananJauh melewati batas workspace429 quota_exceeded

Disimpan

Kiriman disimpan

201 untuk kode, 303 untuk browser

  • WebhookDitandatangani, dicoba ulang selama sekitar 3 hari
  • Email notifikasiKe penerima formulir
  • Dashboard dan APILangsung, saat itu juga

Spam juga disimpan, dan dijawab seperti sukses, tetapi tidak mengirim apa pun.

Apa yang dilakukan setiap tahap

Rate limit sebelum yang lain

Rate limit berjalan sebelum body dibaca. Proteksi flood (600 per menit per IP) bahkan berjalan sebelum pencarian formulir, jadi banjir request tidak pernah sampai ke database. Aturan milik formulir berjalan tepat setelah pencarian. Request yang ditolak tidak memakai jatah. Angka pastinya ada di Rate limit.

Parsing

Body diurai sebagai urlencoded, multipart, atau JSON. Teks di-decode sebagai UTF-8, dinormalisasi ke NFC, CRLF menjadi LF, dan karakter kontrol dihapus. Nama yang diawali _ adalah instruksi reserved, seperti _redirect dan _subject, dan tidak pernah disimpan sebagai jawaban. Lihat Formulir HTML.

Siapa pengirimnya

Header Authorization: Bearer bersifat opsional. Secret key (ik_sk_) dengan scope submissions:write melewati pemeriksaan domain yang diizinkan dan pemeriksaan manusia Ikiform. Publishable key (ik_pub_) hanya berfungsi dari domain yang tercantum di key tersebut. Tanpa key, kiriman dinilai berdasarkan Origin-nya.

Spam

Spam tidak pernah menjadi error. Kiriman yang gagal kebijakan domain yang diizinkan dalam mode spam, atau mendapat skor 5 atau lebih, disimpan dengan status spam dan mendapat respons sukses yang sama seperti kiriman asli, jadi bot tidak belajar apa pun. Spam tidak mengirim webhook atau email dan tidak dihitung dalam pemakaian. Lihat Perlindungan spam.

Simpan dan kirim

Kiriman, pengiriman webhook-nya, dan email notifikasinya ditulis dalam satu batch database, lalu diserahkan ke antrean. Pengiriman webhook dan email tidak pernah memperlambat respons, dan kiriman tidak pernah disimpan tanpa pengirimannya.

JSON atau redirect

Endpoint yang sama menjawab browser dengan halaman dan kode dengan JSON. Ikiform memutuskannya per request:

Cara Ikiform memilih jawaban JSON atau redirect, diperiksa dari atas ke bawah
  1. 1Accept mencakup application/jsonJSON
  2. 2Body-nya JSONJSON
  3. 3Sec-Fetch-Mode: navigateRedirect atau halaman
  4. 4Sec-Fetch-Mode lain, seperti corsJSON
  5. 5Tanpa Sec-Fetch-Mode, Accept mencakup text/htmlRedirect atau halaman
  6. 6Selain itu, seperti curlJSON

Aturan pertama yang cocok yang dipakai.

Dalam mode JSON, sukses berarti 201 { "ok": true, "id": "sub_..." }. Dalam mode halaman, sukses berupa redirect 303, dan error menampilkan halaman error hosted yang mencantumkan masalah field berdasarkan label.

Setelah kiriman disimpan

ApaKapanDetail
WebhookBeberapa detik kemudian, dicoba ulang selama sekitar 3 hariWebhook
Email notifikasiBeberapa detik kemudian, jika notifikasi aktif untuk formulir tersebutDibatasi 50 email per formulir per jam (10 untuk workspace yang berumur kurang dari 7 hari), lalu satu ringkasan per jam
DashboardLangsung, real-timeSpam muncul di filter spam
REST APILangsungREST API
Formulir yang kirimannya berisi nama field bergaya kata sandi, kartu, atau seed phrase akan ditandai dan email notifikasinya ditahan untuk ditinjau. Jangan kumpulkan kredensial dengan backend formulir.

ID

IDBentuknyaCatatan
Formulirfrm_xxxxxxxxxxxxxxxxfrm_ ditambah 16 karakter acak. Publik: ada di URL action formulir Anda.
Kirimansub_01k7v2c9t3e8m5q4x6z0a1b2c3sub_ ditambah 26 karakter, berurutan menurut waktu.
Pengiriman webhookdlv_...Dikirim sebagai webhook-id; tetap sama di setiap percobaan ulang.
Requestreq_...Setiap respons punya header X-Request-Id. Sertakan saat Anda menghubungi dukungan.
{ "ok": true, "id": "sub_01k7v2c9t3e8m5q4x6z0a1b2c3" }