![Ich vermute, dass Chrome eine Anfrage sendet, bevor der Benutzer sie absendet. Ist das überhaupt möglich?](https://rvso.com/image/1595492/Ich%20vermute%2C%20dass%20Chrome%20eine%20Anfrage%20sendet%2C%20bevor%20der%20Benutzer%20sie%20absendet.%20Ist%20das%20%C3%BCberhaupt%20m%C3%B6glich%3F.png)
Ich habe diese Website entwickelt und dabei ein seltsames Verhalten bei Chrome festgestellt. Wenn ich Tomcat neu starte, wird die Datenbank neu erstellt (zu Testzwecken) und aus diesem Grund habe ich eine URL erstellt, die die Datenbank füllt.
Das Problem ist, dass ich manchmal, während ich diese URL noch eingebe, das Zugriffsprotokoll von Tomcat überprüfe und da steht es: Die Anfrage, die ich nicht abgeschickt hatte, wurde irgendwie automatisch abgeschickt. Die Server-Ausgabeprotokolle bestätigen, dass diese „Geisteranfrage“ gesendet wurde.
Wenn ich die eingegebene URL absende, wird die Anforderung wiederholt und ich erhalte eine Fehlerseite, weil die Datenbank einige Einschränkungen aufweist und die Werte wiederholt werden.
Ist dieses Verhalten irgendwie zu erwarten oder irgendwo dokumentiert (und wenn ja, warum ist es inkonsistent)? Hat jemand etwas Ähnliches erlebt?
Antwort1
Ich weiß nicht, ob Chrome Anfragen frühzeitig stellt, aber es könnte und das sollte kein Problem sein.
HTTP GET-Anfragen gelten alsidempotent, was im Grunde bedeutet, dass es keinen Unterschied machen sollte, ob die Anfrage mehrmals gestellt wird oder nur einmal. Wenn Chrome (oder ein anderer Browser) die GET-Anfrage also frühzeitig stellen möchte, um zu versuchen, die Seite vorzuladen, sodass sie schneller geladen zu werden scheint, wenn der Benutzer tatsächlich die Eingabetaste drückt, sollte dies keine negativen Auswirkungen haben.
Ihr Skript zum Füllen der Datenbank sollte bei einer GET-Anforderung nichts mit der Datenbank machen, sondern auf eine POST-Anforderung warten. Bei einer GET-Anforderung geben Sie einfach ein Formular mit einer Schaltfläche zum Senden aus, auf die Sie klicken können, um die POST-Anforderung zum Füllen Ihrer Datenbank zu senden.