CORS preflight-request scheitert an einer standard-header

Beim Debuggen eines CORS Frage, die ich erlebe, die ich gefunden habe das folgende Verhalten. Chrom macht den folgenden OPTIONEN preflight-request (umgeschrieben in CURL von Chrome selbst):

curl -v 'https://www.example.com/api/v1/users' -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://example.com' -H 'Accept-Encoding: gzip,deflate,sdch' -H 'Accept-Language: es-ES,es;q=0.8,en;q=0.6' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36' -H 'Accept: */*' -H 'Referer: http://example.com/users/new' -H 'Connection: keep-alive' -H 'Access-Control-Request-Headers: accept, x-api-key, content-type'

Die Antwort des Servers auf diese Anfrage, wenn die folgenden:

< HTTP/1.1 403 Forbidden
< Date: Thu, 21 Jul 2016 14:16:56 GMT
* Server Apache/2.4.7 (Ubuntu) is not blacklisted
< Server: Apache/2.4.7 (Ubuntu)
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< Strict-Transport-Security: max-age=31536000 ; includeSubDomains
< X-Frame-Options: SAMEORIGIN
< Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
< Content-Length: 20
< Keep-Alive: timeout=5, max=100
< Connection: Keep-Alive

den Körper von der Reaktion "Invalid CORS-request'. Wenn ich die Anfrage wiederholen das entfernen der header "Access-Control-Request-Methode' (und nur der header) OPTIONEN Anforderungen gelingt mit der folgenden Antwort:

< HTTP/1.1 200 OK
< Date: Thu, 21 Jul 2016 14:21:27 GMT
* Server Apache/2.4.7 (Ubuntu) is not blacklisted
< Server: Apache/2.4.7 (Ubuntu)
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< Strict-Transport-Security: max-age=31536000 ; includeSubDomains
< X-Frame-Options: SAMEORIGIN 
< Access-Control-Allow-Headers: origin, content-type, accept, x-requested-with, x-api-key
< Access-Control-Max-Age: 60
< Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
< Access-Control-Allow-Origin: *
< Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
< Content-Length: 0
< Keep-Alive: timeout=5, max=100
< Connection: Keep-Alive

Jedoch die problematische header ist ein CORS-Spezifikation standard-header so sollte es nicht verhindern, dass die Anfrage erfolgreich, richtig? Warum ist dieser header verursacht ein solches Verhalten?

Und wie kann ich Sie optimieren die access-control-Header gesendet von meinem server, um eine Anfrage zu Arbeit und wenn mit Chrome?

Übrigens, ich bin mit Chrome 36.0, und der server ist mit Spring Boot, mit dem CORS-Header wird verwaltet von Spring.

Wenn der Antrag von Firefox (v47.0) ist das Verhalten anders, aber mit einem analogen Ergebnis. Firefox macht das auch nicht senden Sie die preflight-Anfrage, es direkt sendet den POST-request, der erhält als Antwort ein 403 Forbidden. Jedoch, wenn ich die Kopie der Anfrage mit der 'Copy als cURL" - option, und wiederholen Sie es in einem terminal-Fenster, gelingt Es, und sendet die richtige CORS-Header in der Antwort.

Irgendeine Idee?

Update: Firefox sendet den preflight-OPTIONS-Anfrage (dargestellt durch die Live HTTP Header plugin), aber Firebug Masken, so dass das Verhalten in beiden Browsern ist es genau dasselbe. In beiden Browsern ist die "Access-control-request-Methode' - header dem Unterschied, dass die Anfrage fehlschlagen.

InformationsquelleAutor joanlofe | 2016-07-21
Schreibe einen Kommentar