ホームページ >バックエンド開発 >PHPチュートリアル >PHP で CORS ヘッダーを設定しているのに、依然として「Access-Control-Allow-Origin」エラーが発生するのはなぜですか?

PHP で CORS ヘッダーを設定しているのに、依然として「Access-Control-Allow-Origin」エラーが発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 02:22:03694ブラウズ

Why am I still getting an

PHP で CORS が機能しない

Cross-Origin Resource Sharing (CORS) を使用すると、あるドメインから別のドメインにリクエストを行うことができます。別のドメインからリクエストが行われると、ブラウザはリクエストが許可されているかどうかを示す特定のヘッダーについてサーバーの応答をチェックします。

問題:
開発者が送信しようとしていますCORS を使用した www.siteone.com から www.sitetwo.com への POST リクエスト。ただし、サーバーに必要な CORS ヘッダーを設定しているにもかかわらず、「Access-control-Allow-Origin エラー」が発生します。

リクエスト/レスポンス ヘッダー:

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

解決策:
問題は、サーバー上での CORS ヘッダーの設定方法にあります。元のコードでは、次のヘッダーのみを含む簡素化されたアプローチが使用されていました:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');

ただし、CORS 仕様によれば、リクエストを適切に処理するには、より包括的なアプローチが必要です。開発者はコードを次のように更新しました:

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!";

この更新されたコードは、基本的な CORS ヘッダーを設定するだけでなく、実際のリクエストが許可されるかどうかを判断するためにブラウザーによって使用されるプリフライト OPTIONS リクエストも処理します。このより徹底したアプローチを実装することにより、開発者はアプリケーションで CORS を有効にすることに成功しました。

以上がPHP で CORS ヘッダーを設定しているのに、依然として「Access-Control-Allow-Origin」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。