ホームページ > バックエンド開発 > PHPチュートリアル > CORS 実装が PHP で機能しないのはなぜですか?

CORS 実装が PHP で機能しないのはなぜですか?

Barbara Streisand
リリース: 2024-11-04 10:24:29
オリジナル
421 人が閲覧しました

Why is my CORS implementation not working in PHP?

PHP で CORS が機能しない: 解決済みのケース

異なるオリジン間でのデータ交換を容易にするクロスオリジン リソース共有 (CORS) の実装は次のとおりです。共通の課題。ただし、CORS 関連のエラーが発生するとイライラすることがあります。

最近、あるユーザーから、www.siteone.com から www.sitetwo.com にフォーム データを送信しようとしたときに CORS に関する問題が発生したと報告されました。ターゲット ドメインの「cors.php」ファイルに必要なヘッダー設定を実装したにもかかわらず、ユーザーは「Access-control-Allow-Origin」エラーを受け取りました。

分析と解決策:

コードとヘッダーを調査したところ、CORS ヘッダーの初期実装が不完全であることが判明しました。 「cors.php」で使用されている次のコード スニペットでは十分ではありませんでした:

<code class="php">header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');</code>
ログイン後にコピー

CORS リクエストを包括的に処理するには、より詳細な応答が必要です。次の更新されたコードは、有効な解決策を提供しました:

<code class="php">// Allow from any origin
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
}

// Access-Control headers are received during OPTIONS requests
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);
}

echo "You have CORS!";</code>
ログイン後にコピー

結論:

CORS 実装エラーは、任意のオリジンからのリクエストを許可する追加のコード行を組み込むことで解決されました。 、資格情報を有効にし、キャッシュ期間を設定します。この強化された CORS 処理により、クロスオリジンのデータ交換が確実に成功しました。

以上がCORS 実装が PHP で機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート