Warum leitet POST Weiterleitungen zu GET und PUT Weiterleitungen zu PUT?

8

Ich verwende express 4.13.3 (neuste) und folgenden Code:

%Vor%

POST leitet auf GET um, aber PUT leitet zu PUT um. Ist es möglich, PUT auf GET umzuleiten (wie bei POST)?

    
user606521 19.10.2015, 12:43
quelle

3 Antworten

7

Vor dem Tauchen in den Details, unten ist eine Möglichkeit, wie Sie das Problem lösen könnten:

%Vor%

Standardmäßig verwendet Express den HTTP-Code 302 für die Weiterleitung. Gemäß der HTTP-Spezifikation verhindert dies, dass POST / PUT-Anfragen als POST / PUT-Anfragen umgeleitet werden und erklärt, was Sie in Ihrem Code beobachtet haben:

  

Wenn der 302-Statuscode als Antwort auf eine andere Anforderung als empfangen wird   GET oder HEAD, der User Agent darf NICHT automatisch die   Anfrage, es sei denn, es kann vom Benutzer bestätigt werden, da dies möglicherweise   Ändern Sie die Bedingungen, unter denen die Anforderung ausgegeben wurde.

Wenn Sie andererseits eine 303-Weiterleitung verwenden, kann die POST / PUT-Anfrage als POST / PUT-Anfrage umgeleitet werden, wie in diese großartige SO-Antwort :

  

303: Redirect für nicht definierten Grund. Normalerweise hat "Operation hat   fertig, weiter woanders. ' Kunden, die nachfolgende Anfragen für   Diese Ressource sollte den neuen URI nicht verwenden. Kunden sollten dem folgen   Umleitung für POST / PUT / DELETE Anfragen.

    
xaviert 19.10.2015, 13:10
quelle
8

Lassen Sie uns zuerst verstehen, was res.redirect tut:

  

res.redirect ([Status,] Pfad)

     

Weist auf die vom angegebenen Pfad abgeleitete URL mit dem angegebenen HTTP-Statuscode-Status um. Wenn Sie keinen Status angeben, wird standardmäßig der Statuscode "302" gefunden. "

Wenn wir uns die HTTP 1.1-Spezifikation für eine 302-Antwort ansehen , sehen wir

  

Hinweis: Aus historischen Gründen kann ein Benutzeragent die Anfrage ändern         Methode von POST zu GET für die nachfolgende Anfrage. Wenn das ist         Verhalten ist unerwünscht, der Statuscode 307 (Temporary Redirect)         kann stattdessen verwendet werden.

Eine 307-Anfrage behält das HTTP-Verb in allen Fällen bei, aber das ist nicht erwünscht. Sie möchten, dass das Verb in GET geändert wird. In diesem Fall möchten Sie ein 303 :

  

303 Siehe Sonstiges

     

Der Statuscode 303 (Siehe Andere) zeigt an, dass der Server ist      Umleiten des Benutzeragenten zu einer anderen Ressource, wie von a angegeben      URI im Kopfzeilenfeld "Location", das ein      indirekte Antwort auf die ursprüngliche Anfrage. Ein Benutzeragent kann ausführen      eine Abrufanforderung, die auf diesen URI abzielt ( eine GET- oder HEAD-Anforderung, wenn      Verwendung von HTTP ), die möglicherweise auch umgeleitet werden und das Eventual präsentieren      Ergebnis als Antwort auf die ursprüngliche Anfrage.

Eine 303-Antwort wird den Client auffordern, eine GET-Anforderung für die angegebene Ressource auszuführen (sofern er HTTP 1.1 versteht). Geben Sie einfach einen 303-Statuscode in Ihren Weiterleitungen ein:

%Vor%     
apsillers 19.10.2015 13:13
quelle
1

Der Weg von put ist korrekt, Sie leiten die Anfrage an einen anderen Ort um, aber die http-Methode ist dieselbe. Und deshalb versucht es, erneut auf put zuzugreifen. (Sie ändern die http-Methode nicht.)

  

Warum post auf get

umleitet

Hier ist Antwort .

    
Laxmikant Dange 19.10.2015 13:06
quelle

Tags und Links