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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Fehlermeldung angeben, Ihr server muss
Access-Control-Allow-Credentials: true
als response-header. Dies ist auch erklärt Fetch: https://fetch.spec.whatwg.org/#cors-protocol-and-credentials"Einige Anfragen nicht auslösen CORS "preflight". Diese werden als "einfache Anfragen" in diesem Artikel, obwohl der Fetch-spec (die definiert, CORS) nicht verwenden, der Begriff."
Lesen Sie weiter in https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests