Einzelnen Beitrag anzeigen

alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#1

Nach einem redirect 301 wird POST wird durch GET überschrieben

  Alt 16. Feb 2022, 14:26
Hallo alle zusammen!

Ich habe einen REST-Server und einen REST-Client mit dem DMVC von Daniele Teti geschrieben.

Die Filter-Parameter für die Abfrage GetHistorie() werden als JSON im Body übergeben.
Mit POST wird die Abfrage ausgeführt.

Delphi-Quellcode:
    [MVCPath('/historie')]
    [MVCConsumes(TMVCMediaType.APPLICATION_JSON)]
    [MVCProduces(TMVCMediaType.APPLICATION_JSON)]
    [MVCHTTPMethod([httpPOST])]
    procedure GetHistorie([MVCFromBody] Filter: TFltHistorie);
Die Produktiv-Umgebung läuft über einen Reverse-Proxy mit NGINX und Let's encrypt.

Wenn die Abfrage über HTTPS geht ist alles ok, die POST-Methode wird ausgeführt.

Wenn die Abfrage über HTTP gestartet wird,
erfolgt durch NGINX eine Umleitung auf HTTPS.
Code:
  ...
  return 301 https://$server_name$request_uri;
  ...
Diese Umleitung mit dem Code 301 bewirkt im REST-Server in der Funktion
System.Net.HttpClient.IsAutoRedirectWithGET(..)
ein Überschreiben der POST-Methode durch eine GET-Methode.

Das hat zur Folge, dass der Client als Antwort ein 404 erhält,
da Funktion GetHistorie() als HTTP-POST und nicht als HTTP-GET definiert ist.

Ok, Lösung:
gleich das HTTPS Protkoll verwenden.

Jetzt die Fragen:

Warum wird, wie es aussieht standardmäßig, nach einem redirect 301 ein POST durch ein GET ersetzt?

Kann man dieses Verhalten abstellen?

Alex
Alexander

Geändert von alex517 (16. Feb 2022 um 14:30 Uhr)
  Mit Zitat antworten Zitat