Formular-ID

So funktioniert es

Jede Prüfung, die eine Einsendung durchläuft, in Reihenfolge, und was jede davon zurückgeben kann.

Jeder Post an /f/<formId> durchläuft dieselbe Pipeline. Günstige Prüfungen laufen zuerst, sodass eine Flut oder ein unbekanntes Formular fast nichts kostet. Die erste fehlschlagende Prüfung bestimmt die Antwort.

Die Prüfungen, die eine Einsendung der Reihe nach durchläuft

Bevor der Body gelesen wird

  1. 1Flutschutz600 pro Minute und IP, über alle Formulare429 rate_limited
  2. 2Formular-LookupUnbekannte, gelöschte oder deaktivierte Formulare404 not_found
  3. 3Rate-Limits des FormularsDie Voreinstellung des Formulars, pro Besucher und pro Formular429 rate_limited
  4. 4PausiertDas Formular ist im Dashboard pausiert403 form_paused

Den Post lesen

  1. 5Parsenurlencoded, multipart oder JSON, UTF-8, Größenlimits400, 413, 415 oder 422
  2. 6API-SchlüsselNur wenn ein Authorization-Header gesendet wird403 forbidden
  3. 7Erlaubte DomainsOrigin oder Referer gegen die Domains des FormularsSpam oder 403
  4. 8MenschlichkeitsprüfungTurnstile-Token, wenn die Prüfung aktiv ist403 oder eine Prüfseite

Den Post bewerten

  1. 9ValidierenGegen die veröffentlichten Felder, falls vorhanden422 validation_failed
  2. 10BewertenHoneypot, Timing, Links, Schlüsselwörter, DuplikateSpam ab 5
  3. 11IdempotenzEin wiederholter Schlüssel liefert die erste Antwort erneutWiederholung, 409 oder 422
  4. 12Monatliche NutzungWeit über dem Limit des Workspace429 quota_exceeded

Gespeichert

Einsendung gespeichert

201 für Code, 303 für Browser

  • WebhooksSigniert, etwa 3 Tage lang erneut versucht
  • Benachrichtigungs-E-MailAn die Empfänger des Formulars
  • Dashboard und APILive, sofort

Spam wird auch gespeichert und wie ein Erfolg beantwortet, löst aber nichts aus.

Was jede Stufe macht

Rate-Limits vor allem anderen

Rate-Limits greifen, bevor der Body gelesen wird. Der Flutschutz (600 pro Minute pro IP) läuft sogar vor der Formularsuche, sodass eine Flut nie die Datenbank erreicht. Die eigenen Regeln des Formulars greifen direkt nach der Suche. Abgelehnte Anfragen verbrauchen kein Kontingent. Genaue Zahlen findest du unter Rate-Limits.

Parsing

Der Body wird als urlencoded, multipart oder JSON geparst. Text wird als UTF-8 dekodiert und nach NFC normalisiert, CRLF wird zu LF und Steuerzeichen werden entfernt. Namen, die mit _ beginnen, sind reservierte Anweisungen wie _redirect und _subject und werden nie als Antworten gespeichert. Siehe HTML-Formulare.

Wer es gesendet hat

Ein Authorization: Bearer-Header ist optional. Ein Secret Key (ik_sk_) mit dem Scope submissions:write überspringt die Prüfung der erlaubten Domains und die Ikiform-Menschlichkeitsprüfung. Ein Publishable Key (ik_pub_) funktioniert nur von den Domains, die beim Schlüssel eingetragen sind. Ohne Schlüssel wird der Post anhand seines Origin beurteilt.

Spam

Spam ist nie ein Fehler. Ein Post, der die Domain-Richtlinie im Spam-Modus nicht erfüllt oder einen Score von 5 oder mehr erreicht, wird mit Status spam gespeichert und bekommt dieselbe Erfolgsantwort wie ein echter, sodass Bots nichts lernen. Spam löst keine Webhooks oder E-Mails aus und zählt nicht zur Nutzung. Siehe Spamschutz.

Speichern und zustellen

Die Einsendung, ihre Webhook-Zustellungen und ihre Benachrichtigungs-E-Mail werden in einem Datenbank-Batch geschrieben und dann an eine Queue übergeben. Webhook-Zustellung und E-Mail verlangsamen nie die Antwort, und eine Einsendung wird nie ohne ihre Zustellungen gespeichert.

JSON oder eine Weiterleitung

Derselbe Endpunkt antwortet Browsern mit Seiten und Code mit JSON. Ikiform entscheidet pro Anfrage:

Wie Ikiform zwischen einer JSON-Antwort und einer Weiterleitung wählt, von oben nach unten geprüft
  1. 1Accept enthält application/jsonJSON
  2. 2Der Body ist JSONJSON
  3. 3Sec-Fetch-Mode: navigateWeiterleitung oder Seite
  4. 4Jeder andere Sec-Fetch-Mode, etwa corsJSON
  5. 5Kein Sec-Fetch-Mode, Accept enthält text/htmlWeiterleitung oder Seite
  6. 6Alles andere, etwa curlJSON

Die erste passende Regel gewinnt.

Im JSON-Modus ist Erfolg 201 { "ok": true, "id": "sub_..." }. Im Seitenmodus ist Erfolg eine 303-Weiterleitung, und Fehler zeigen eine gehostete Fehlerseite, die Feldprobleme nach Label auflistet.

Nachdem eine Einsendung gespeichert ist

WasWannDetails
WebhooksSekunden später, erneute Versuche über etwa 3 TageWebhooks
Benachrichtigungs-E-MailSekunden später, wenn Benachrichtigungen für das Formular aktiv sindBegrenzt auf 50 E-Mails pro Formular und Stunde (10 bei Workspaces, die jünger als 7 Tage sind), danach eine stündliche Zusammenfassung
DashboardSofort, liveSpam erscheint unter dem Spamfilter
REST APISofortREST API
Formulare, deren Einsendungen Feldnamen enthalten, die nach Passwort, Karte oder Seed-Phrase aussehen, werden markiert und ihre Benachrichtigungs-E-Mails zur Prüfung zurückgehalten. Sammle keine Zugangsdaten mit einem Formular-Backend.

IDs

IDSieht aus wieHinweise
Formularfrm_xxxxxxxxxxxxxxxxfrm_ plus 16 zufällige Zeichen. Öffentlich: Sie steht in der Action-URL deines Formulars.
Einsendungsub_01k7v2c9t3e8m5q4x6z0a1b2c3sub_ plus 26 Zeichen, zeitlich sortiert.
Webhook-Zustellungdlv_...Wird als webhook-id gesendet; bleibt bei erneuten Versuchen gleich.
Anfragereq_...Jede Antwort hat einen X-Request-Id-Header. Gib ihn an, wenn du den Support kontaktierst.
{ "ok": true, "id": "sub_01k7v2c9t3e8m5q4x6z0a1b2c3" }