ホームページ  >  に質問  >  本文

PHP の CORS の問題: プリフライト要求からの応答が渡されない。許可されたソース

つまり、CORS に関する投稿がたくさんあることはわかっており、それらを追加しているところですが、役立つ回答が見つかりません。そこで、PHP API に依存する Angular 4 アプリケーションを構築しています。 app.example.com のアプリと api.example.com の API を使用してドメインにスローすると、ローカルでは正常に動作します。ログインが原因でできません次のエラーが表示されます:

XMLHttpRequest は http://api.example.com/Account/Login を読み込むことができません。 アクセス制御チェックに失敗したプリフライト要求への応答: いいえ リクエストに「Access-Control-Allow-Origin」ヘッダーが存在する リソース。したがって、ソース「http://app.example.com」は許可されません アクセス。

私のphpコードは次のようになります:

リーリー

私の Angular の投稿は次のようになります:

リーリー

Postman 経由でリクエストを実行すると (これは CORS には影響しません)、次の結果が得られます:

リーリー

これが問題の核心であるかどうかをテストするために、起点を '*' に設定してみましたが、やはり同じように失敗しました。

#########編集###### 以下の情報を更新するだけです。ヘッダーの大文字と小文字を変更しても効果はありません。また、if ステートメントからコードを取り出しても効果はありません。

ライブアプリケーションにローカル API に移動するように指示して PHP をデバッグしましたが、PHP は期待どおりに動作しています。ヘッダーを設定し、それをすべての if ステートメントに挿入します。

ショット 2 の編集

本当に助けが必要なので、何かアイデアがある人がいたら、よろしくお願いします。

ショットの編集 3

すべてのヘッダー要素を php ではなく .htaccess に設定すると、パスできます。しかし、今私は上記のエラーに悩まされています。これは Postman を使用するときにいつも発生するエラーですが、今度は実際の Web サイトを使用するときに発生します。

{"error":"invalid_client","error_description":"ヘッダーまたは本文にクライアント資格情報が見つかりません"}

私の応答ヘッダーは次のようになります

リーリー それが機能したら、* から私のドメインのみに変更します。ただし、今は * のままにします。

私のヘッダーのリクエストどおり。

P粉564192131P粉564192131338日前630

全員に返信(2)返信します

  • P粉952365143

    P粉9523651432023-10-22 00:47:32

    私の同様のケースでは、Angular フロントエンドと Php バックエンドが以下のコードに役立ちました。最初にヘッダーを送信します:

    リーリー

    その後はオプションのリクエストを無視できます:

    リーリー

    このアプローチは、Angular で埋め込みリクエスト メソッドの「post」および「delete」を処理するのに役立ちました。

    返事
    0
  • P粉860370921

    P粉8603709212023-10-22 00:29:25

    さて、私も最近同様の問題を抱えていましたが、.htaccess を使わずにバックエンドのみですべて解決しました。

    ブラウザがクロスサーバーリクエストを送信するとき、最初に OPTIONS リクエストを送信して、リクエストが有効であること、および「実際の」リクエストを送信できることを確認します。 「実際の」リクエストは、OPTIONS から正しく有効な応答を取得したときに送信されます。

    バックエンドへの両方のリクエストについて、content-type、allow-origin、allow-headers などの正しいヘッダーが返されることを確認する必要があります...

    バックエンドの OPTIONS リクエストで、アプリケーションがアプリケーションの完全なフローを続行するのではなく、ヘッダーを返し、応答を返すようにしてください。

    「実際の」リクエストでは、正しいヘッダーと通常の応答本文を返す必要があります。

    ###例:### リーリー ### 覚えておくべきこと: ###

    使用する場合: "Access-Control-Allow-Credentials" = true 「Access-Control-Allow-Origin」が「*」になっていないことを確認してください。正しいドメインに設定する必要があります。 (ここでたくさんの血が流されました:/)

    • 「Access-Control-Allow-Headers」で取得する許可ヘッダーを定義します。 定義しない場合、リクエストは失敗します

    • 「Authorization: Bearer」を使用する場合、「Access-Control-Allow-Headers」にも「Authorization」が含まれている必要があります。そうでない場合、リクエストは失敗します。

      返事
      0
  • キャンセル返事