CORSを使用してドメイン間問題を解決する方法

3304 ワード

オリジナル文章、転載は明記してください:技術兄から転載します
微信購読番号:技術兄
技術者
君に違う世界をあげる
ドメイン間
ドメイン間リクエストとは?
リソースが自分のサーバとは異なるドメインまたはポートに要求を開始すると、ドメイン間HTTP要求が開始されます.
ドメイン間制限があるのはなぜですか?
ドメイン間リソース共有(CORS、すなわちCross Origin Resource Sharing)メカニズムは、Webサーバがドメイン間アクセス制御を行うことを可能にし、安全にドメイン間アクセスを行うことができ、ビューアはAPIコンテナでCORSを使用することをサポートし、ドメイン間HTTP要求によるリスクを低減する.
CORSは単純な要求と複雑な要求に分けられる
単純なリクエストは、次の条件をほぼ満たします.
次のいずれかの方法を使用します.
  • GET
  • HEAD
  • POST

  • HTTPヘッダは以下のフィールドを超えない:
  • Accept
  • Accept-Language
  • Content-Language
  • DPR
  • Downlink
  • Save-Data
  • Viewport-Width
  • Width

  • Content-Typeは次のいずれかのみです.
  • text/plain
  • multipart/form-data
  • application/x-www-form-urlencoded

  • 以上の条件を満たさなければ、複雑なリクエストと見なすことができます.
    サーバがドメイン間要求に応答できない場合は、PHPを例にとると、サービス側帯域上のAccess-Control-Allow-Originの応答ヘッダが必要となる.
    header('Access-Control-Allow-Origin:*']);

    ここで「*」は、データが誰にでも表示されることを意味し、特定のアドレスのみにアクセスしたい場合は、*を対応するアドレスに変更できます.
    複雑なリクエストは、OPTIONSメソッドで開始される前リクエストを先に送信します.前リクエストは、サーバがリクエストを許可するかどうかを検出し、ドメイン間リクエストがサーバに与える未知の影響を回避します.
    複雑な要求を行う場合、PHPを例に、サービス側を設定する必要があります.
    header
    ('Access-Control-Allow-Origin: *');
    header
    ('Access-Control-Allow-  Methods: GET, POST, PUT,DELETE,OPTIONS,PATCH');
    header
    ("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");

    ここで、Access-Control-Allow-Methodはプリリクエスト後に許可されたリクエスト方式を示し、Access-Control-Allow-Headersはプリリクエスト後に許可された応答ヘッダを示し、プリリクエストが成功すれば実際のリクエストを行うことができる.
    アイデンティティ証明書付きドメイン間リクエスト
    一般的にHTTP cookiesに基づく認証認証認証は、ドメイン間XMLHttpRequestリクエストに対して、ブラウザは対応する認証情報を送信しません.認証を持つXMLHttpRequestリクエストが必要な場合は、PHPを例に追加の設定が必要です.
    header
    ('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
    header
    ("Access-Control-Allow-Credentials: true");
    header
    ("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
    header
    ('Access-Control-Allow-Methods:GET,POST, PUT,DELETE,OPTIONS,PATCH');

    フロントエンドはwithCredentialsをtrueに設定してサーバにcookiesを送信する必要があり、サービス側はAccess-Control-Allow-Credentials:trueを設定して応答内容を要求者に返す必要があり、withCredentials:trueAccess-Control-Allow-Origin:*は同時に存在しないため、$_SERVERから(PHPスーパーグローバル変数は、Webサーバによって作成された情報を含み、サーバとクライアントの構成、および現在のリクエスト環境に関する情報を提供します.)リクエストドメインの情報を取得します.
    本文は私达のかつて出会った问题のために、今整理してノートになってみんなに分かち合って、同じ问题に直面する友达に対して役に立つことを望みます.
    過去の回顧
    サーバ|9.9元構築サーバサービス側|どのようにユビキタスネットワークバックグラウンドフロントエンド|VUE環境の構築を実現するwebフロントエンド|vueシリーズチュートリアル(2)ブロックチェーンチュートリアル–高速入門ウィジェットはどうしてこんなに火がついたのですか?
    微信は「技術兄」を検索し、「技術兄」の微信公衆番号に注目して、より多くの技術文章を見る.