2017-06-26 2 views
0

Ich sende eine POST-Anfrage an einen Server, den ich besitze und auf den ich zugreifen kann.POST-Anfrage mit Preflight enthält erlaubte Herkunft, aber Fehler, deren Herkunft nicht erlaubt ist

Dies löst eine CORS Preflight-Anfrage mit OPTIONS Methode und gibt die folgende Antwort-Header:

HTTP/1.1 200 
Allow: HEAD,POST,GET,OPTIONS 
Last-modified: Mon, 26 Jun 2017 13:57:08 BST 
Access-Control-Allow-Origin: http://localhost:3000 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Methods: POST, GET 
Access-Control-Allow-Headers: origin, content-type, accept, authorization 
Access-Control-Expose-Headers: Set-Cookie 
Content-Type: application/vnd.sun.wadl+xml 
Content-Length: 1126 

Die nachfolgende POST-Anforderung meldet dann

Fetch API cannot load http://localhost:8080/api/reservation. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 500. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

mit Hilfe von Javascript fetch.

Wie oben erwähnt, führt ein POST zu meinem /reservation Endpunkt zu einem solchen Fehler. POST-Anforderungen an andere Endpunkte auf meinem Server sind jedoch erfolgreich und melden nicht, dass der Ursprung nicht zulässig ist. Beide führen denselben fetch Code aus; Ausgabe von OPTIONS Preflight und dann POST.

var RestRequest = { 

    post: function(endpoint, payload, callback, secondCallback) { 

     fetch('http://localhost:8080/api' + endpoint, { 
      headers: { 
       'Accept': 'application/json', 
       'Content-Type': 'application/json', 
      }, 
      method: 'post', 
      credentials: 'include', 
      body: payload 
     }) 
     .then(function (response) { 
      return response.json() 
     }) 
     .then(function (result) { 
      callback(result) 
      if (secondCallback != null) { 
       secondCallback() 
      } 
     }) 
    } 
}; 

Warum mein Browser beschwert, dass der Ursprung der die Anfrage keinen Zugriff erlaubt wird, wenn ein CORS Preflight eindeutig Zugang zu diesem speziellen Herkunft erlaubt?

Ändern meiner Server-CORS-Antwortfilter, um alle Ursprünge zuzulassen, führt zu derselben Fehlermeldung. Die gleichen Anfragen vom Postman-Plugin zu erhalten, ist erfolgreich.

Antwort

1

Es besagt, dass die Antwort HTTP-Statuscode 500 hatte, also unterscheidet es sich von der Antwort, die Sie gepostet haben (HTTP 200).

Höchstwahrscheinlich haben Sie einen Serverfehler, der verhindert, dass die CORS-Header zur Antwort hinzugefügt werden.

+0

Der Statuscode 200 stammt aus der CORS Preflight OPTIONS-Anfrage. – Shiri

+0

Richtig tut mir leid, habe ich nicht bemerkt, aber das Problem ist immer noch das gleiche. Wenn auf Ihrem Server ein Fehler von 500 auftritt, werden die Header nicht gesendet. Das Problem, das Sie haben, ist nicht mit CORS, sondern mit einem anderen Fehler auf Ihrem Server. –

+0

Es gibt keinen Fehler auf dem Server, da die Verwendung von Postman zur Ausgabe der genau gleichen Anfrage erfolgreich ist. Es scheint, als könnte es ein Problem mit javascript 'fetch' api sein, da die Verwendung von' unirest' zur Handhabung der REST-Anfragen ebenfalls erfolgreich ist. Der 500-Code scheint von einer unvollständigen POST-Anforderung zu stammen, was dazu führt, dass der Server nach dem Faktum eine 500 wirft, da er eine Nachricht in der POST-Anfrage erwartet und diese nicht empfangen hat, da der Browser die Prozedur abgebrochen hat t erlaubt. In diesem Fall bin ich nicht sicher, warum irgendeine Art von POST-Anfrage es an den Server geschafft hat, wenn es nicht erlaubt war. – Shiri

Verwandte Themen