CORS funktioniert nicht in PHP
Cross-Origin Resource Sharing (CORS) ermöglicht es Ihnen, Anfragen von einer Domain an eine andere Domain zu stellen. Wenn eine Anfrage von einer anderen Domäne gestellt wird, überprüft der Browser die Antwort des Servers auf bestimmte Header, die angeben, ob die Anfrage zulässig ist.
Problem:
Ein Entwickler versucht zu senden eine POST-Anfrage von www.siteone.com an www.sitetwo.com unter Verwendung von CORS. Sie stoßen jedoch auf einen „Access-control-Allow-Origin-Fehler“, obwohl die erforderlichen CORS-Header auf dem Server festgelegt wurden.
Anfrage-/Antwort-Header:
Response Headers Connection Keep-Alive Content-Length 487 Content-Type text/html; charset=iso-8859-1 Date Fri, 23 Aug 2013 05:53:20 GMT Keep-Alive timeout=15, max=99 Server Apache/2.2.15 (CentOS) WWW-Authenticate Basic realm="Site two Server - Restricted Area" Request Headers Accept */* Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Content-Length 43 Content-Type application/x-www-form-urlencoded; charset=UTF-8 Host www.sitetwo.com Origin http://www.siteone.com Referer http://www.siteone.com/index.html User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0
Lösung:
Das Problem liegt in der Art und Weise, wie die CORS-Header auf dem Server festgelegt werden. Der ursprüngliche Code verwendete einen vereinfachten Ansatz, der nur die folgenden Header enthielt:
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
Jedoch erfordert die ordnungsgemäße Bearbeitung von Anfragen gemäß der CORS-Spezifikation einen umfassenderen Ansatz. Der Entwickler hat den Code wie folgt aktualisiert:
if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } // Your actual code goes here echo "You have CORS!";
Dieser aktualisierte Code legt nicht nur die grundlegenden CORS-Header fest, sondern verarbeitet auch Preflight-OPTIONS-Anfragen, die von Browsern verwendet werden, um zu bestimmen, ob die tatsächliche Anfrage zulässig ist. Durch die Implementierung dieses gründlicheren Ansatzes konnte der Entwickler CORS erfolgreich für seine Anwendung aktivieren.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich immer noch die Fehlermeldung „Access-Control-Allow-Origin', wenn ich die CORS-Header in PHP festgelegt habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!