Sie eine POST-Anfrage in Eckige 2 mit JSON Körper
Ich bin einige POST-Anforderungen mit POSTBOTEN wie folgt:
Dies ist mit POSTBOTEN und es funktioniert Prima. Auch vom POSTBOTEN
POST /supervisor/stop/process HTTP/1.1
Host: bento
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 66b05631-8b4e-473a-9d3f-deaa544ecac6
{
"ip" : "192.168.1.115",
"port" : "9001",
"process" : "public_video_convert:video_convert_01"
}
Habe ich versucht die gleiche Sache mit Winkel-2 wie folgt:
let url = "http://bento/supervisor/stop/process";
let data = {
"ip": "192.168.1.115",
"port": "9001",
"process": "public_video_convert:video_convert_01"
}
let body = JSON.stringify(data);
let head = new Headers({
'Content-Type': 'application/json'
});
this.http.post(url, body, {headers : head})
.map(res => res.json())
.subscribe(
data => {console.log(data);},
err => console.log(err),
() => console.log('Fetching complete for Server Metrics')
);
Wenn ich diesen starte, bekomme ich eine 405 Method Not Allowed
Den details der Anfrage und der Antwort vom dev-tools ist wie folgt:
Ich bin nicht sicher, wie Sie damit umgehen können.
- Ich denke, die
PreFlight
Anfrage fehlschlägt. Tun Sie den server Steuern?HTTP OPTIONS
reqyests wurde möglicherweise nicht aktiviert es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus irgendeinem Grund, OPTIONEN Anträge wurden nicht bedient. Ich habe das folgende Werkzeug :
https://github.com/jdesrosiers/silex-cors-provider
Es jetzt funktioniert.
Kurze Antwort
Bekommen Sie die 405 vom server, weil Sie nicht wissen, wie man mit "OPTIONEN" - Anforderungen (daher die "Methode Nicht Erlaubt" als Antwort).
Nun die details
Dies ist ein "preflight" - Anfrage, die gesendet wird, aus dem browser, wenn Sie senden eine "Nicht Einfache" Anforderung zu einer anderen domain (in diesem Fall, Ihre web-Seite wird gehostet von evil.com und versucht zu senden, xhr, um bento). Für Ihr Beispiel, was macht Ihre-Anfrage "Nicht Einfach" ist der header "Content-type":"application/json".
Dies geschieht, wenn die web-app ist ein cross-origin-Anfrage. In der Regel gibt es zwei Szenarien:
Sind Sie entweder senden eine "einfache" Anforderung, in dem Fall der browser sendet diese direkt ( Mit den Origin-Header), oder Sie senden eine "nicht Einfache" Anforderung, in dem Fall der browser sendet die preflight-Anforderung (OPTIONEN), um den server zuerst, um zu bestätigen, dass der Ursprung im aufgeführt ist die "Access-Control-Allow-Origin", und dann sendet die eigentliche Anfrage.
Mehr details auf Cross-Origin Resource Sharing hier: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
Derzeit nur text wird unterstützt durch Angulars
Http
. Gibt es Pläne zur Unterstützung von anderen Körper-Typen https://github.com/angular/http/issues/75Ich denke, dass Sie vergessen haben, importieren Sie die
Headers
Klasse:In diesem Fall, Ihre benutzerdefinierten Header nicht zu der Anforderung Hinzugefügt. Ich kann nicht sehen, die Content-Type-header in die details der Anfrage und der Antwort vom dev-tools, die Sie zur Verfügung gestellt. Dieser header gesendet werden sollen, innerhalb der request-basierten code, den Sie zur Verfügung gestellt (mit Ausnahme der Importe).
Server nicht scheinen, um die Unterstützung der POST-Methode ohne eine JSON-Inhalt geben. Das ist, warum Sie erhalten einen 405-Fehler...