2014-06-28 13 views
6

Mein Backend erfordert, dass der Anforderungsheader "Content-Type" genau "application/json" lautet. Dies ist eine CORS-Anfrage und in Chrome funktioniert alles einwandfrei. Die genauen Header, von Entwickler-Tool Netzwerk-Registerkarte Quelle:Probleme beim Ändern von Anforderungsheadern in Firefox mit AngularJS

Content-Type: application/json 

Ich habe dies in AngularJS mit $ http.default.headers.post und es funktioniert gut in Chrome. Es funktioniert jedoch nicht in Firefox. Firefox sendet diese stattdessen:

Content-Type: application/json; charset=UTF-8 

Ich versuchte Header zu ändern:

  • Einstellungen $ http.default.headers (für .post, .common)
  • Einstellung benutzerdefinierte Header für eine Anfrage
  • ein $ http Interceptor

Alle diese Methoden funktionieren gut in Chrome, aber nicht in Firefox. Die Anfrage enthält Daten.

Wenn ich den 'Content-Type' Header alle zusammen zu entfernen, ist es immer noch geschickt, aber dann ist es:

Content-Type: text/plain; charset=UTF-8 

(dies geschieht sowohl in Chrome und Firefox).

Das führt mich zu der Annahme, dass der Browser den Header erzwingt :) Wie kann ich das in Firefox umgehen?

+1

Ankommende dumme Frage von mir: Can‘ t Sie nur Ihr Backend akzeptieren, was ist eine vollkommen normale HTTP-Header? Sie wissen nie wann/wenn Chrome plötzlich entscheidet, es auch zu erzwingen. – ivarni

+0

das Backend ist nicht wirklich mein - ich verwende LimeSurvey RemoteControl API, die ein bisschen zu empfindlich ist. Ich kann die Anfrage im Webserver transformieren - was ich gerade gemacht habe, welche Art von Problem löst das Problem, aber nicht die Frage. – wiherek

+0

Ja, ich habe das als Kommentar und nicht als Antwort aus genau diesem Grund hinterlassen. – ivarni

Antwort

6

Firefox hat charset=UTF-8hard-coded for string payloads.

Sie können aber sende eine Blob statt:

var r = new XMLHttpRequest(); 
r.open("POST", ...); 
r.send(new Blob(
[JSON.stringify({a:1})], 
{type:"application/json"} 
)); 

Dies auch völlig in Ordnung, mit dem Winkel $http XHR Wrapper funktioniert:

$http({ 
    method: "POST", 
    url: "/echo/json", 
    headers: { 
     "Content-Type": "application/json" 
    }, 
    data: new Blob([JSON.stringify({ 
     a: 1 
    })]) 
}); 

Fiddle

+0

danke für die Erklärung. Ich möchte es nicht als Blob senden, da es so aussieht, als ob ich AngularJS nicht so nutzen kann. – wiherek

+1

Aktualisierter Beitrag zum Anzeigen eckig ist in Ordnung mit 'Blob's. – nmaier

+0

Danke für die Info über die Hard-Codierung. Macht mich verrückt :) – danwoods

Verwandte Themen