Björn Höhrmann: Browser-History: Kein autom. no-cache bei POST

Beitrag lesen

Gibt es eine Möglichkeit, das man im Browser mit der Zurück-Schaltfläche eine Datei aufrufen kann, an die per POST Daten geschickt wurden?

Diese "Zurück-Schaltfläche" ist Browserabhängig, was passiert, wenn man sie nutzt, ist alleine Sache des Browsers, es ist nicht genormt und dementsprechend kann man es auch nicht beeinflussen.

Das Problem: Ich habe ein mehrstufiges Bestellformular, welches aus 3 php-Scripten mit je einem Forumlar besteht, die eingegebenen Daten werden immer per POST an das nächste Script geschickt. Das doofe, wenn man jetzt im Browser nochmal ein Formular zurück möchte, kommt immer die Fehlermeldung, das die Seite nicht mehr aktuell ist, so dass man manuell "aktualisieren" klicken muß, damit die POST-Daten erneut gesendet werden, und die Seite ausgegeben wird.

Wenn die Daten tatsächlich längere Zeit aktuell bleiben, kannst du 'Cache-Control: public' und ein 'Expires:' für einem bestimmten Punkt in der Zukunft senden, damit machst du die Antwort prinzipiell zwischenspeicherbar, was die Benutzeragenten machen, bleibt allerdings von ihnen und anderen Faktoren abhängig. Alternativ wäre, Status 303 mit entsprechender Seitenangabe zu senden, sprich, eine quasi-Weiterleitung auf eine zwischenspeicherbare Resource.

Das ist sehr unschön. Die einzige mir bekannte Möglichkeit dieses zu umgehen ist die Übertragung der Daten per GET, aber dann stehen die Daten in den URLs, Logs... was nicht wirklich erstrebenswert ist. Außerdem ist der GET-Request in Anzahl der Zeichen begrenzt.

Nein, das ist er nicht. Einige Implementationen begrenzen ihn künstlich, das dürfen sie aber nicht. GET kannst du im übrigen nur dann verwenden, wenn die Anfrage keine Nebeneffekte hervorruft, genau dann solltest du allerdings auch GET verwenden.

Kann man das evtl durch entsprechende Header in ALLEN Browsern unterbinden?

Nichts, aber auch gar nichts funktioniert in "ALLEN" Browsern zuverlässig.

Vielleicht solltest du einfach nochmal nachdenken, ob du das ganze so überhaupt sinnvoll implementiert hast.