Ich habe Probleme, eine domänenübergreifende CORS-Anfrage zu erhalten, damit sie mit Chrome ordnungsgemäß funktioniert.
Header anfordern:
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
Antwortheader:
Access-Control-Allow-Headers:*
Access-Control-Allow-Origin:*
Allow:GET, POST, OPTIONS
Content-Length:0
Date:Tue, 30 Oct 2012 20:04:28 GMT
Server:BaseHTTP/0.3 Python/2.7.3
Error:
XMLHttpRequest cannot load domain. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
Der Python-Code für die Optionsanforderung lautet:
self.send_response(200)
self.send_header('Allow', 'GET, POST, OPTIONS')
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Headers', '*')
self.send_header('Content-Length', '0')
self.end_headers()
Es scheint, dass der Access-Control-Allow-Origin
Platzhalter ignoriert wird?
Diese CORS-Header werden nicht
*
als Wert unterstützt. Der einzige Weg besteht darin, Folgendes zu ersetzen*
:Accept, Accept-CH, Accept-Charset, Accept-Datetime, Accept-Encoding, Accept-Ext, Accept-Features, Accept-Language, Accept-Params, Accept-Ranges, Access-Control-Allow-Credentials, Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Request-Headers, Access-Control-Request-Method, Age, Allow, Alternates, Authentication-Info, Authorization, C-Ext, C-Man, C-Opt, C-PEP, C-PEP-Info, CONNECT, Cache-Control, Compliance, Connection, Content-Base, Content-Disposition, Content-Encoding, Content-ID, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Script-Type, Content-Security-Policy, Content-Style-Type, Content-Transfer-Encoding, Content-Type, Content-Version, Cookie, Cost, DAV, DELETE, DNT, DPR, Date, Default-Style, Delta-Base, Depth, Derived-From, Destination, Differential-ID, Digest, ETag, Expect, Expires, Ext, From, GET, GetProfile, HEAD, HTTP-date, Host, IM, If, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Keep-Alive, Label, Last-Event-ID, Last-Modified, Link, Location, Lock-Token, MIME-Version, Man, Max-Forwards, Media-Range, Message-ID, Meter, Negotiate, Non-Compliance, OPTION, OPTIONS, OWS, Opt, Optional, Ordering-Type, Origin, Overwrite, P3P, PEP, PICS-Label, POST, PUT, Pep-Info, Permanent, Position, Pragma, ProfileObject, Protocol, Protocol-Query, Protocol-Request, Proxy-Authenticate, Proxy-Authentication-Info, Proxy-Authorization, Proxy-Features, Proxy-Instruction, Public, RWS, Range, Referer, Refresh, Resolution-Hint, Resolver-Location, Retry-After, Safe, Sec-Websocket-Extensions, Sec-Websocket-Key, Sec-Websocket-Origin, Sec-Websocket-Protocol, Sec-Websocket-Version, Security-Scheme, Server, Set-Cookie, Set-Cookie2, SetProfile, SoapAction, Status, Status-URI, Strict-Transport-Security, SubOK, Subst, Surrogate-Capability, Surrogate-Control, TCN, TE, TRACE, Timeout, Title, Trailer, Transfer-Encoding, UA-Color, UA-Media, UA-Pixels, UA-Resolution, UA-Windowpixels, URI, Upgrade, User-Agent, Variant-Vary, Vary, Version, Via, Viewport-Width, WWW-Authenticate, Want-Digest, Warning, Width, X-Content-Duration, X-Content-Security-Policy, X-Content-Type-Options, X-CustomHeader, X-DNSPrefetch-Control, X-Forwarded-For, X-Forwarded-Port, X-Forwarded-Proto, X-Frame-Options, X-Modified, X-OTHER, X-PING, X-PINGOTHER, X-Powered-By, X-Requested-With
.htaccess
Beispiel (CORS enthalten):FAQ:
Warum
Access-Control-Allow-Headers
,Access-Control-Expose-Headers
,Access-Control-Allow-Methods
sind super lange Werte?Diese unterstützen die
*
Syntax nicht, daher habe ich die häufigsten (und exotischsten) Header aus dem Internet in verschiedenen Formaten # 1 # 2 # 3 gesammelt (und ich werde die Liste von Zeit zu Zeit aktualisieren).Warum verwenden Sie
Header unset ______
Syntax?GoDaddy-Server (auf denen meine Website gehostet wird ..) haben einen seltsamen Fehler: Wenn die Header bereits festgelegt sind, wird der vorherige Wert mit dem vorhandenen Wert verbunden. (Anstatt ihn zu ersetzen) Auf diese Weise "bereinige" ich vorhandene Werte (wirklich nur eine schnelle && schmutzige Lösung)
Ist es für mich sicher, "wie besehen" zu verwenden?
Nun ... meistens wäre die Antwort JA, da die
.htaccess
Header auf die Skripte (PHP, HTML, ...) und Ressourcen (.JPG, .JS, .CSS) beschränkt sind, die von der folgenden "Ordner" -Lage bereitgestellt werden. Optional möchten Sie möglicherweise dieAccess-Control-Allow-Methods
Zeilen entfernen . AuchConnection
,Time-Zone
,Keep-Alive
undDNT
,Accept-Ranges
,Vary
,X-UA-Compatible
,X-Frame-Options
,X-Content-Type-Options
undX-Xss-Protection
ist nur ein Vorschlag Ich bin für meinen Online-Service mit .. fühlen sich frei , diejenigen zu entfernen ...entnommen aus meinem Kommentar oben
quelle
Access-Control-Allow-Origin "*"
aber nichts hat funktioniert, bis ich dies verwendet habe. Nicht einmal der CDN-Anbieter hatte eine Antwort für uns. Ich betreibe die Website in Siteground , vielleicht ist es als GoDaddy obligatorisch, zuerst alles zu deaktivieren.Access-Control-Allow-Methods
all diesen Methoden entfernen : HTTP / 0.9, HTTP / 1.0, HTTP / 1.1, HTTP / 2Ich fand, dass
Access-Control-Allow-Headers: *
dies NUR für die OPTIONS-Anfrage eingestellt werden sollte. Wenn Sie es für eine POST-Anfrage zurücksenden, bricht der Browser die Anfrage ab (zumindest für Chrome).Der folgende PHP-Code funktioniert für mich
Ich fand ähnliche Fragen mit einer irreführenden Antwort:
Access-Control-Allow-Headers
stimmt nicht mit localhost überein. Es ist falsch: Ich kann CORS mit Post normal auf meinem lokalen Server verwendenAccess-Control-Allow-Headers
akzeptiert Platzhalter. Es ist auch falsch, Wildcard funktioniert für mich (ich habe nur mit Chrome getestet)Ich brauche einen halben Tag, um das Problem herauszufinden.
Viel Spaß beim Codieren
quelle
*
aufAccess-Control-Allow-Headers
sogarOPTIONS
.Zitiert aus Monsur,
Also hier ist meine PHP-Lösung.
quelle
header('Access-Control-Allow-Headers: ' . $_SERVER['HTTP_ACCESS_CONTROL_ALLOW_HEADERS']);
Hier ist die Beschwörung für Nginx in a
quelle