Heim >Backend-Entwicklung >PHP-Tutorial >Warum erhalte ich immer noch die Fehlermeldung „Access-Control-Allow-Origin', wenn ich die CORS-Header in PHP festgelegt habe?

Warum erhalte ich immer noch die Fehlermeldung „Access-Control-Allow-Origin', wenn ich die CORS-Header in PHP festgelegt habe?

Linda Hamilton
Linda HamiltonOriginal
2024-11-03 02:22:03694Durchsuche

Why am I still getting an

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn