Sehr verwirrt von cors mit fetch und wenn eine options-Anfrage gemacht wird

Ich habe den folgenden code verwendet whatwg Holen:

  const headers = new Headers();

  //uncommenting this causes the preflight options request to be sent 
  //headers.append('x-something', 'foo');

  const response = await fetch('http://localhost:5000/api/managers', {
    headers,
    credentials: 'include'
  });

Den obigen code nicht machen, ein preflight-Optionen verlangen, es sei denn, ich kommentieren Sie diese Zeile:

 //headers.append('x-something', 'foo');

Ich habe den server konfiguriert, wie dies der localhost Anfrage:

app.use(cors({
  origin: 'http://localhost:4040'
}));

Wenn ich die Anfrage mit der credentials: 'include' option, bekomme ich die folgende Fehlermeldung in der chrome-browser:

Fetch API kann nicht geladen werden http://localhost:5000/api/managers. Anmeldeinformationen
flag ist 'wahr', aber die 'Access-Control-Allow-Credentials" - header ist
". Es muss 'true' zu ermöglichen, Anmeldeinformationen. Herkunft
'http://localhost:4040' ist daher nicht der Zugriff erlaubt.

Wenn ich entfernen credentials: 'include' aber die benutzerdefinierten header wie dieser:

  headers.append('x-something', 'foo');

  const response = await fetch('http://localhost:5000/api/managers', {
    headers
  });

Dann die chrome Registerkarte Netzwerk zeigt nur eine OPTIONS-Anfrage mit einem 204 No Content Antwort, obwohl eine JSON-Antwort vom server zurückgegeben.

Ich verstehe nicht, warum der chrome-Registerkarte "Netzwerk" nicht angezeigt wird eine GET-Anforderung mit der JSON-Antwort, wie es passiert ist.

Die request-und response-sieht aus wie dies mit 204 no content Antwort:

Request URL:http://localhost:5000/api/managers
Request Method:OPTIONS
Status Code:204 No Content
Remote Address:[::1]:5000
Response Headers
view source
Access-Control-Allow-Headers:x-something
Access-Control-Allow-Methods:GET,HEAD,PUT,POST,DELETE,PATCH
Access-Control-Allow-Origin:http://localhost:4040
Connection:keep-alive
Date:Wed, 02 Nov 2016 21:23:24 GMT
Vary:Accept-Encoding
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:x-something
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:5000
Origin:http://localhost:4040
Pragma:no-cache
Referer:http://localhost:4040/base/winratio
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
Name
managers
/api
info?t=1478121804370
/sockjs-node

WENN ich den code einfach so:

  const response = await fetch('http://localhost:5000/api/managers', {
  });

Dann der google chrome Registerkarte Netzwerk zeigt nur einen GET-request mit einem 200 HTTP-Antwort und der json-es wird zurückkehren:

Request URL:http://localhost:5000/api/managers
Request Method:GET
Status Code:200 OK
Remote Address:[::1]:5000
Response Headers
view source
Access-Control-Allow-Origin:http://localhost:4040
Connection:keep-alive
Content-Length:1104
Content-Type:application/json; charset=utf-8
Date:Wed, 02 Nov 2016 21:35:21 GMT
Vary:Accept-Encoding
X-Content-Type-Options:nosniff
X-DNS-Prefetch-Control:off
X-Download-Options:noopen
X-Frame-Options:SAMEORIGIN
X-XSS-Protection:1; mode=block
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:5000
Origin:http://localhost:4040
Pragma:no-cache
Referer:http://localhost:4040/base/winratio
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
Name
InformationsquelleAutor dagda1 | 2016-11-02
Schreibe einen Kommentar