$ http.post () -Methode sendet tatsächlich ein GET

8

HINWEIS:

Ich habe ein möglicherweise zusammenhängendes Problem gefunden, das eine neue Frage rechtfertigt hier

Das ist ein seltsames Problem. Ich habe im Laufe von 2 Jahren eckig verwendet und bin nie auf dieses Problem gestoßen.

Ich verwende angular v1.5.0. Ich mache eine Post-Anfrage wie folgt:

%Vor%

Serienmäßige POST-Anfrage richtig? Bekomme das. Ich schaue in die Konsole und die Registerkarte Netzwerk protokolliert die Anfrage als GET. Bizarr. Also habe ich den Code so programmiert, dass er so funktioniert:

%Vor%

Das Gleiche. Nachdem ich den Servicecode $http durchlaufen habe, bin ich zuversichtlich, dass die Header richtig gesetzt werden. Ist jemand anderes auf dieses Problem gestoßen?

Aktualisieren

Wenn ich germanio 's berate, habe ich stattdessen versucht, den Dienst $resource zu verwenden:

%Vor%

(Dies gibt einen Fehler aus einem anderen Grund zurück, es führt den POST trotzdem ordnungsgemäß aus). Ich habe das gleiche Problem: Die Anfrage wird als GET in der Konsole protokolliert.

Hier sind die Header der Anfrage, wenn es auf meinen Server kommt:

%Vor%

Update 2

Gemäß dem Vorschlag von georgeawg habe ich einen Interceptor verwendet, um die Anfrage in den verschiedenen Phasen zu protokollieren. Hier ist der Interceptor-Code:

%Vor%

Nachdem ich diesen Code ausgeführt habe, bekomme ich das geloggt:

%Vor%

Das bedeutet also, dass die Anfrage innerhalb von Angular als POST gesendet wird, aber immer noch als GET sowohl im Browser als auch auf meinem Server protokolliert wird. Ich denke, hier ist etwas Low-Level bei der Arbeit am HTTP-Protokoll, das ich nicht verstehe.

Wird die Anfrage an den Server gesendet, bevor sie tatsächlich im Browser angemeldet ist? Wenn das der Fall ist, könnte das zumindest meinen Server als Schuldigen bezeichnen.

In der Hoffnung, herauszufinden, was los ist, hier ist mein Server-Code:

%Vor%

Mein Server löst einen EOF-Fehler aus, wenn er die Anfrage erhält:

%Vor%

Nicht sicher, was ein EOF in diesem Zusammenhang überhaupt bedeuten würde.

Update 3

Durch den Vorschlag einer anderen Verwendung habe ich versucht, POSTMAN zu verwenden, um meinen Server mit einer gefälschten POST-Anfrage zu treffen. Der Server empfängt die Anfrage ordnungsgemäß. Das bedeutet für mich, dass es etwas gibt, mit dem die POST-Anfrage kantig ist. Bitte helfen.

Irgendwelche Ideen?

Vollständige Serverprotokolle:

%Vor%

Aktualisieren 4

Ich bin auf etwas Interessantes gestoßen:

Charles protokolliert eine POST-Anfrage, wenn ich auf myurl poste, aber der Antwortstatus ist 301. Nach dem POST wird ein GET protokolliert. Das ist der GET, der meinen Server trifft.

Mein Server führt, wie Sie oben sehen können, keine Umleitung aus. Wie läuft das 301?

    
dopatraman 29.03.2016, 21:51
quelle

2 Antworten

7

Dies liegt an einer Sicherheitsüberlegung.

Wenn in Ihrem Fall eine Weiterleitung vom Server an den Browser gesendet wird, wiederholt der Browser die POST-Anfrage nicht (sondern nur eine "einfache" GET-Anfrage).

Im Allgemeinen sendet ein Browser keine POST-Daten an eine Weiterleitungs-URL, da der Browser nicht berechtigt ist, zu entscheiden, ob Sie dieselben Daten an die neue URL senden möchten, die Sie an die ursprüngliche URL senden wollten Passwörter, Kreditkartennummern und andere sensible Daten). Aber versuchen Sie nicht, es zu umgehen, verwenden Sie einfach den registrierten Pfad Ihres Handlers zum POST oder einen der anderen Tipps, die in der verknüpften Antwort erwähnt werden.

Für den Kontext siehe Frage:

Go Webserver leitet POST-Anfragen automatisch um

Sie können mehr zum Thema hier lesen:

Warum hat HTTP keine POST-Weiterleitung?

    
icza 30.03.2016, 19:23
quelle
0

Dieser Code sendet tatsächlich GET an den Server

%Vor%

Sie müssen transformRequest verwenden, das Beispiel unten sendet tatsächlich POST

%Vor%     
Tom 09.10.2016 23:05
quelle

Tags und Links