HTTP-Weiterleitungen erfolgen über die HTTP-Codes 301 und 302 (möglicherweise auch andere Codes) und ein als "Ort" bezeichnetes Header-Feld, das die Adresse des neuen Zielorts enthält. Browser senden jedoch immer eine "GET" -Anforderung an diese URL.
Häufig müssen Sie Ihren Benutzer jedoch per POST auf eine andere Domain umleiten (z. B. Bankzahlungen). Dies ist ein häufiges Szenario und eine echte Voraussetzung. Weiß jemand, warum eine solche gemeinsame Anforderung in der HTTP-Spezifikation vernachlässigt wurde? Die Abhilfe ist ein Formular zu senden (mit Parametern in versteckten Feldern) mit Wirkung auf die Zielposition (den Wert des Location - Header - Feldes) und verwenden Sie setTimeout
das Formular an den Zielort zu senden.
web-development
web-applications
http
Saeed Neamati
quelle
quelle
Antworten:
In HTTP 1.1 gibt es tatsächlich einen Statuscode ( 307 ), der angibt, dass die Anforderung unter Verwendung derselben Methode und Post-Daten wiederholt werden sollte .
Wie andere bereits gesagt haben, besteht hier die Möglichkeit eines Missbrauchs , weshalb viele Frameworks in ihren Abstraktionen an 301 und 302 festhalten. Mit richtigem Verständnis und verantwortungsvollem Umgang sollten Sie jedoch in der Lage sein, das zu erreichen, wonach Sie suchen.
Beachten Sie, dass Benutzeragenten gemäß der W3.org-Spezifikation den Benutzer auffordern sollten, bevor sie die Anforderung am neuen Speicherort erneut ausführen , wenn dies
METHOD
nicht der Fall istHEAD
oderGET
ist . Sie sollten dem Benutzer auch einen Hinweis und einen Fallback-Mechanismus bereitstellen, falls alte Benutzerprogramme nicht sicher sind, was sie mit einem 307 tun sollen.Mit diesem Formular:
Und wenn Sie Test307.aspx haben, geben Sie einfach 307 mit dem Standort zurück: http://google.com , Chrome 13 und Fiddler bestätigen, dass "test = the test" tatsächlich bei Google gepostet wird. Die weitere Antwort ist natürlich eine 405, da Google den POST nicht zulässt, aber die Mechanik zeigt.
Weitere Informationen finden Sie unter Liste der HTTP-Statuscodes und in der W3.org-Spezifikation .
quelle
Ich habe auf dieser Seite hier eine gute Erklärung gefunden .
Ich mag es zwar nicht, Benutzer technisch einzuschränken, um zu verhindern, dass sie unerwünschtes Chaos anrichten oder ihren Anwendungen unerwünschten Schaden zufügen, aber ich kann den Punkt verstehen und es ist sinnvoll.
quelle
GET (und einige andere Methoden) sind in der http-Spezifikation ( RFC 2616 ) als 'SAFE' definiert :
Dies bedeutet, dass eine GET-Anforderung keine schwerwiegenden Konsequenzen für den Benutzer haben sollte, abgesehen davon, dass sie etwas sieht, das er möglicherweise nicht sehen möchte. Eine POST-Anforderung kann jedoch eine Ressource ändern, die für ihn oder andere Personen wichtig ist.
Obwohl sich dies mit JavaScript geändert hat, gab es traditionell verschiedene Benutzeroberflächen - Benutzer konnten GET-Anforderungen durch Klicken auf Links auslösen, mussten jedoch ein Formular ausfüllen, um eine POST-Anforderung auszulösen. Ich denke, die Entwickler von HTTP waren daran interessiert, die Unterscheidung zwischen sicheren und nicht sicheren Methoden beizubehalten.
Ich denke auch nicht, dass es jemals notwendig sein sollte, zu einem POST umzuleiten. Jede Aktion, die ausgeführt werden muss, kann vermutlich durch Aufrufen einer Funktion innerhalb des serverseitigen Codes oder, wenn sie auf einem anderen Server ausgeführt werden muss, anstatt eine Umleitung mit einer URL für den Browser an den POST an den Server zu senden, ausgeführt werden könnte eine Anfrage an diesen Server selbst richten und sich wie ein Proxy für den Benutzer verhalten.
quelle