2017-02-18 4 views
1

Ich mache eine Fetch-Anfrage von Domäne A zu einem Bild auf Domäne B. Ich habe die richtigen Header auf Domäne B (Access-Control-Allow-Origin: *)Javascript CORS fetch response.status = 0

eingerichtet

wenn ich nun bestätigen die Antwort-Status (Response.Status) i immer Status erhalten 0. Allerdings, wenn ich in der Chrom-Debugger prüfen kann ich das Bild sehen, wurde mit dem Status erhielt 200

.

Mein Anwendungsfall ist zu entscheiden, ob die Ressource basierend auf dem Statuscode zwischengespeichert werden soll oder nicht. Da Domäne B nur statische Ressourcen enthält und der Cache permanent sein soll, ist es besser, (noch) nicht zu cachen, wenn der Statuscode nicht korrekt ist.

Weiß jemand, warum ich dieses Verhalten bekomme?

Edit:

  • Beide Domänen sind https
  • Dies ist der Code-Schnipsel:

    fetch(e.request).then(function(response){ 
    console.log(e.request.url+' - '+response.status); 
    } 
    
+0

'Wenn ich jedoch den Chrom-Debugger einchecke, kann ich sehen, dass das Bild mit dem Status 200 empfangen wurde. - Kannst du auch den CORS Response Header sehen? Status 0 bedeutet in der Regel ein CORS-Problem –

+0

Kors Response-Header war in der Tat verfügbar, danke – jrnv

Antwort

0

Okay, ich habe die Antwort selbst gefunden, ich habe zu kämpfen damit schon für ein paar Stunden.

Die e.request stammte von einem Servicetechniker, und es scheint, dass der Anforderungsmodus standardmäßig auf "navigieren" eingestellt ist. Dies hat ‚cors‘

ich so eine neue Anfrage erstellt haben werden:

var request = new Request(e.request.url, { 
    method: e.request.method, 
    headers: e.request.headers, 
    mode: 'cors', 
    redirect: 'manual'}); 

Es ist seltsam erscheinen mir, dass cors-Inhalte ohne cors-Modus erlaubt ist, aber die Zustands- Code ist trotzdem modifiziert.

Wenn jemand weiß, was könnte die Begründung dafür sein?