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