Warum bekomme ich doppelte Formularsendungen?
Weil das Formular tatsächlich mehr als einmal abgeschickt wurde und auf der Empfangsseite niemand es bemerkt hat. Eine Seite sendet dieselbe Anfrage aus mindestens fünf ganz gewöhnlichen Gründen zweimal — ein zweiter Klick, der erneute Versuch einer Anfrage, die schon erfolgreich war, ein Neuladen, zwei Handler an einem Formular und Bots. Den Button nach dem ersten Druck zu deaktivieren behebt also einen davon und lässt den Rest stehen. Die dauerhafte Lösung sitzt auf der Empfangsseite: Ignoriere eine identische Sendung desselben Formulars innerhalb eines kurzen Zeitfensters und beantworte diese Wiederholung genau so, als wäre sie angenommen worden.
Fünf Wege, auf denen aus einer Anfrage drei werden
Der erste Verdacht fällt auf das Formular, und dem Formular fehlt meist nichts. Dubletten entstehen, wenn eine gewöhnliche Seite auf ein gewöhnliches Netz trifft, und der erste nützliche Schritt ist keine Reparatur — es ist herauszufinden, welchen dieser Fälle du vor dir hast, denn sie haben nicht dieselbe Antwort.
- Die besuchende Person hat zweimal auf Senden gedrückt. Nach dem ersten Druck änderte sich sichtbar nichts, also wurde noch einmal gedrückt. Das ist die häufigste Ursache und die einzige, die der übliche Rat, den Button zu deaktivieren, tatsächlich behandelt.
- Eine Anfrage wurde wiederholt, nachdem sie längst funktioniert hatte. Die Sendung erreichte deinen Handler, der Handler speicherte sie, und die Antwort ging auf dem Rückweg verloren. Für die sendende Seite ist das ein Fehlschlag, also versucht sie es erneut. Das ist der Fall, der identische Kopien wenige Sekunden auseinander erzeugt, und keine Sorgfalt in der Seite verhindert ihn.
- Die Seite wurde neu geladen oder per Zurück-Button erneut erreicht. Ein Formular, das absendet und dann an derselben Stelle seine eigene Dankesmeldung zeichnet, bietet bereitwillig an, alles noch einmal zu senden, wenn jemand neu lädt. Diese Kopien treffen Minuten oder Stunden auseinander ein, und das ist das Erkennungszeichen.
- Zwei Dinge bearbeiten ein Formular. Der eingebaute Formular-Handler des Hosts und dazu ein Skript, das ein Generator oder ein Plugin ergänzt hat, senden jeweils ihre eigene Kopie. Sie treffen gleichzeitig ein und haben oft eine andere Form — die eine trägt alle Felder, die andere kommt halb leer an.
- Es war kein Mensch. Link-Vorablader, Sicherheitsscanner und gewöhnliche Bots erreichen Formular-Endpunkte und senden sie mitunter ab. Diese Kopien sind weniger bloß wiederholt als vielmehr nutzlos: leere Felder, unsinnige Werte oder derselbe Inhalt von vielen Adressen. Ein Honeypot-Feld — eine Eingabe, die ein Mensch nie sieht und nie ausfüllt — entfernt die meisten davon nahezu mühelos.
Zwei Blicke klären die meisten Fälle. Sieh dir den Abstand zwischen den Kopien an: gleichzeitig deutet auf zwei Handler oder einen Bot, wenige Sekunden auf einen zweiten Klick oder einen erneuten Versuch, Minuten oder mehr auf ein Neuladen. Sieh dann nach, ob die Kopien identisch sind, denn eine echte zweite Anfrage von einem echten Menschen unterscheidet sich fast immer irgendwo, und sei es in einem Wort.
Die Lösung gehört auf die Empfangsseite
Alles auf dieser Liste außer den Bots ist normales Verhalten und kein Defekt, den du beseitigen kannst. Netze verlieren Antworten, Menschen klicken zweimal, Browser senden erneut, was man ihnen zu senden aufgetragen hat. Nichts davon wird aufhören, also muss sich ändern, was passiert, wenn dieselbe Anfrage ein zweites Mal eintrifft.
Der Mechanismus ist klein. Leite aus dem Inhalt der Sendung einen kurzen Fingerabdruck ab, merke ihn dir ein paar Minuten, und wenn derselbe Inhalt innerhalb dieses Fensters erneut eintrifft, speichere keine zweite Kopie. Das deckt den zweiten Klick, den Netzwerkversuch und das Neuladen auf einmal ab, denn es ist ihm gleich, welcher Fall vorlag — nur dass diese genaue Anfrage schon gesehen wurde.
Leicht falsch machen lässt sich, womit du die Dublette beantwortest. Wir hosten die Seiten, die unsere Kundschaft veröffentlicht, deshalb senden deren Kontaktformulare alle an einen Endpunkt von uns, und Dubletten waren eine Beschwerde, die immer wiederkam: drei verschiedene Kundenseiten, auf denen eine Anfrage dreimal, fünfmal und zweimal gespeichert war. Sie trat so lange erneut auf, bis der Endpunkt die Dublette Byte für Byte so beantwortete, als wäre sie angenommen worden. Ein Endpunkt, der eine Wiederholung ablehnt, selbst höflich und mit hilfreicher Meldung, teilt der Seite davor mit, dass etwas schiefging, und dann sendet die eigene Wiederholungslogik der Seite oder die Person, die den Fehler liest, es noch einmal. Ein Endpunkt, der Dubletten entfernt, aber wie ein Fehlschlag aussieht, ist ein Dublettengenerator.
Das Fenster wählen und was nicht weggeworfen wird
Die Länge des Fensters ist die einzige echte Ermessensfrage, und sie tauscht einen Fehler gegen einen anderen. Zu kurz, und ein später Wiederholungsversuch kommt trotzdem durch. Zu lang, und du verwirfst stillschweigend eine echte zweite Anfrage — die Person, die morgens schrieb, nichts hörte und mit denselben Worten noch einmal schrieb. Ein paar Minuten decken die mechanischen Ursachen ab, die alle schnell passieren; wir haben uns für zehn entschieden, und ein Kontaktformular ist hier nachsichtig, weil eine echte zweite Anfrage in so kurzem Abstand selten ist.
Nimm den Fingerabdruck von den Feldern, die die besuchende Person ausgefüllt hat, und von nichts sonst. Es ist verlockend, die ganze Anfrage zu verrechnen, und genau das schaltet den Mechanismus stillschweigend ab, denn ein Zeitstempel, ein Sitzungstoken oder ein Tracking-Parameter unterscheiden sich bei jeder Sendung — so sieht jede Dublette einzigartig aus und es wird nie etwas gefangen. Dieselbe Vorsicht gilt für alles, was deine eigene Seite der Sendung anfügt, nachdem die besuchende Person damit fertig ist.
Zähle zuletzt die Dubletten, die du verwirfst, statt sie stillschweigend wegzuwerfen. Ein Endpunkt, der Dubletten entfernt, und ein kaputter Zustellweg sehen aus einem leeren Posteingang identisch aus, und einer von beiden ist weit dringender: Anfragen, die überhaupt nie ankommen, sind eine andere Untersuchung, und du willst diese hier schnell ausschließen können, statt dich zu fragen, ob deine eigene Lösung die Nachricht verschluckt hat.
FAQ
- Behebt es das, wenn ich den Senden-Button nach dem ersten Klick deaktiviere?
- Es behebt eine von fünf Ursachen, und es lohnt sich trotzdem, weil diese Ursache die häufigste und die Änderung trivial ist. Gib der besuchenden Person sofort ein Zeichen, dass der Druck angekommen ist, und deaktiviere das Bedienelement, solange die Anfrage unterwegs ist. Nicht erreichen kann es einen erneuten Versuch unterhalb der Seite, ein Neuladen, einen zweiten Handler oder einen Bot — betrachte es also als den Feinschliff und die Prüfung auf der Empfangsseite als die eigentliche Lösung.
- Sollte ich pro Formular ein eindeutiges Token nutzen statt den Inhalt zu verrechnen?
- Wenn du beide Enden kontrollierst, ja: Das ist die stärkere Variante, und Zahlungs-APIs machen es so. Die sendende Seite erzeugt einen Schlüssel, wenn das Formular gezeichnet wird, und verwendet ihn bei jedem erneuten Versuch wieder, sodass die empfangende Seite einen Wiederholungsversuch genau erkennt, statt ihn zu erschließen. Der Grund, stattdessen den Inhalt zu verrechnen, ist, dass es von der sendenden Seite nichts verlangt, was zählt, wenn das Formular von einem Baukasten, einem Generator oder einem Plugin stammt, das du nicht kontrollierst.
- Wie räume ich die Dubletten auf, die ich schon habe?
- Gruppiere nach Inhalt statt nach Zeitstempel, behalte die älteste jeder Gruppe und lies eine Stichprobe, bevor du irgendetwas löschst, denn zwei wirklich getrennte Anfragen können Wort für Wort identisch sein, wenn jemand nach Schweigen nachhakt. Sind die Kopien als E-Mail in deinem Posteingang gelandet, funktioniert dieselbe Gruppierung auch dort, und es lohnt zu prüfen, ob deine Antwort nur an eine davon ging. Repariere zuerst den Endpunkt, sonst machst du das nächste Woche wieder.
Soll das jemand für dich erledigen?
AgentCeres ist ein gemanagtes KI-Marketingteam: Spezialisten erstellen die Entwürfe, du gibst frei, was rausgeht. 14 Tage kostenlos testen, ab $39/Monat.