ホームページ >バックエンド開発 >PHPチュートリアル >laravelのクロスドメイン機能を有効にする方法の詳細な説明

laravelのクロスドメイン機能を有効にする方法の詳細な説明

巴扎黑
巴扎黑オリジナル
2017-09-01 15:25:461621ブラウズ

この記事は主に、Laravel でクロスドメイン機能を有効にする方法に関する関連情報をサンプルコードを通じて詳しく紹介します。この記事は、学習や仕事に役立つ特定の参考になります。以下の編集者と一緒に学びましょう。

はじめに

この記事では主に、クロスドメイン機能を有効にするlaravelに関する関連コンテンツを紹介し、参考と学習のために共有します。以下では多くを述べませんが、詳細を見てみましょう。導入。

クロスドメインリクエスト

セキュリティ上の理由から、ブラウザはスクリプトでのクロスドメインリクエストを制限します。 XMLHttpRequest は同一生成元ポリシーに従うため、XMLHttpRequest を使用して HTTP リクエストを構築するすべてのアプリケーションは、独自のドメイン名にのみアクセスできます。クロスドメインリクエストを構築する必要がある場合、開発者はブラウザと協力して、クロスドメインリクエストを許可する構成を作成する必要があります。 -ドメインリクエスト。

W3C アプリケーション ワーキング グループは、Web アプリケーション サーバーがクロスサイト アクセス制御をサポートできるようにするクロスリソース共有メカニズムを推奨し、安全なクロスサイト データ送信を可能にします。このメカニズムは、元のモードが拡張されました。

  • どのリクエストソースがリソースコンテンツへのアクセスを許可されているかを示すために、レスポンスのヘッダーに Access-Control-Allow-Orign を追加する必要があります

  • ブラウザはリクエストソースとレスポンスが一致していることを確認します。検証済みです

  • クロスドメインリクエストの場合、ブラウザは、指定されたリソースがクロスドメインリソースアクセスを受け入れる準備ができているかどうかを判断するために、単純ではないリクエストを事前に送信します

  • サーバーアプリケーションはリクエストヘッダーをチェックしますOrignリクエストがクロスドメインかどうかを判断します。

クロスオリジンリソース共有標準

クロスオリジンリソース共有標準では、サーバーがブラウザを通じてサーバー上のリソースにアクセスできるソースを宣言できるようにする一連の HTTP ヘッダーが追加されます。さらに、サーバー データへの破壊的な応答を引き起こす HTTP リクエスト メソッド (特に GET 以外の HTTP メソッド、または特定の MIME タイプを使用した POST リクエスト) の場合、標準ではブラウザが最初に OPTIONS 形式でプリセット リクエストを送信する必要があることが強く要求されています。 .リクエスト (プリフライトリクエスト) を使用して、クロスオリジンリクエスト用にサーバーによってサポートされている HTTP メソッドを取得します。サーバーがクロスオリジンリクエストを許可していることを確認したら、実際のHTTPリクエストメソッドを使用して実際のリクエストを送信します。サーバーは、リクエストとともにクレジット情報 (Cookie および HTTP 認証関連データを含む) を送信する必要があるかどうかをクライアントに通知することもできます。


クロスオリジン共有標準では、ブラウザとサーバーの協力が必要です。現在、ブラウザのメーカーはリクエスト部分を自動的に完了できるため、クロスオリジンリソースアクセスの焦点は依然としてサーバー側にあります。

以下に、標準で利用可能ないくつかの応答ヘッダーと要求ヘッダーを示します。

Response Header

  • Access-Control-Allow-Origin: どのリクエストソースがリソースへのアクセスを許可されるかを示します。値は「*」、「null」、または単一のソースアドレスです。

  • Access-Control-Allow-Credentials : 認証情報識別子がリクエストから省略された場合に応答が公開されるかどうかを示します。事前リクエストの場合、ユーザーの認証情報を実際のリクエストに含めることができることを示します。

  • Access-Control-Expose-Headers : どのヘッダー情報を CORS API 仕様 API に安全に公開できるかを示します。

  • Access-Control-Max-Age : 事前リクエストを事前リクエスト キャッシュに保存できる期間を指定します。

  • Access-Control-Allow-Methods: 事前リクエストの場合、どのリクエストメソッドを実際のリクエストに使用できるか。

  • Access-Control-Allow-Headers: 事前リクエストの場合、実際のリクエストでどのヘッダー情報を使用できるかを示します。

  • Origin: 事前リクエストまたはクロスドメインリクエストの発信元を示します。

  • Access-Control-Request-Method: プレリクエストの場合、プレリクエスト内のどのリクエストメソッドが実際のリクエストで使用できるかを示します。

  • Access-Control-Request-Headers: プレリクエスト内のどのヘッダー情報が実際のリクエストで使用できるかを示します。

Request Header

  • Origin: リクエストまたは事前リクエストの送信元を示します。

  • Access-Control-Request-Method: プレリクエストを送信するときにこのリクエストヘッダーを使用して、実際のリクエストで使用されるリクエストメソッドを示します。

  • Access-Control-Request-Headers: このリクエスト ヘッダーは、プレリクエストの送信時に含まれ、実際のリクエストが伝送するリクエスト ヘッダーを示します。

ミドルウェア

Laravelでクロスドメインリクエストを許可するには、特にクロスドメインリクエストを処理するレスポンスヘッダーを追加する応答を追加するミドルウェアを構築できます:


<?php namespace App\Http\Middleware;

use Closure;
use Response;
class EnableCrossRequestMiddleware {

 /**
 * Handle an incoming request.
 *
 * @param \Illuminate\Http\Request $request
 * @param \Closure $next
 * @return mixed
 */
 public function handle($request, Closure $next)
 {

 $response = $next($request);
  $response->header(&#39;Access-Control-Allow-Origin&#39;, config(&#39;app.allow&#39;));
  $response->header(&#39;Access-Control-Allow-Headers&#39;, &#39;Origin, Content-Type, Cookie, Accept&#39;);
  $response->header(&#39;Access-Control-Allow-Methods&#39;, &#39;GET, POST, PATCH, PUT, OPTIONS&#39;);
  $response->header(&#39;Access-Control-Allow-Credentials&#39;, &#39;true&#39;);
  return $response;
 }

}

ここで、以下の点に注意してください:

  • クロスドメインアクセスが必要で、認証情報を伴う必要があるリクエストの場合、XMLHttpRequest インスタンスで withCredentials を true として指定する必要があります。

  • 独自のニーズに応じてこのミドルウェアを構築できます。リクエストに認証情報 (Cookie、セッションを含む) を含める必要がある場合は、Access-Control-Allow-Credentials を true に指定する必要があります。この応答ヘッダーを指定しない場合、ブラウザは単に応答を無視します。

  • Access-Control-Allow-Credentials が応答で true として指定されている場合、Access-Control-Allow-Origin を *

  • Post-middleware は正常に応答する場合にのみ応答ヘッダーが追加されます。また、例外が発生した場合、応答はミドルウェアを経由しません。

以上がlaravelのクロスドメイン機能を有効にする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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