セキュリティ上の理由から、ブラウザはスクリプトでのクロスドメインリクエストを制限します。 XMLHttpRequest は同一生成元ポリシーに従うため、XMLHttpRequest を使用して HTTP リクエストを構築するすべてのアプリケーションは、独自のドメイン名にのみアクセスできます。クロスドメインリクエストを構築する必要がある場合、開発者はブラウザと協力して、クロスドメインリクエストを許可する構成を作成する必要があります。 -ドメインリクエスト。
この記事では主に、Laravel でクロスドメイン機能を有効にする方法について詳しく紹介します。この記事は、皆さんの学習や仕事に役立つことを願っています。みんな。
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('Access-Control-Allow-Origin', config('app.allow'));
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
$response->header('Access-Control-Allow-Credentials', 'true');
return $response;
}
}
その中には次のものがあります
- 付随する認証情報を必要とするクロスドメイン アクセス リクエストの場合、XMLHttpRequest インスタンスで withCredentials を true として指定する必要があります。
- 独自のニーズに応じてこのミドルウェアを構築できます。リクエストに認証情報 (Cookie、セッションを含む) を含める必要がある場合は、Access-Control-Allow-Credentials を true に指定する必要があります。 -requests この応答ヘッダーを指定しない場合、ブラウザーは単に応答を無視すると言われています。
- Access-Control-Allow-Credentials が応答で true として指定されている場合、Access-Control-Allow-Origin を *
- Post-middleware は正常に応答する場合にのみ応答ヘッダーが追加されます。また、例外が発生した場合、応答はミドルウェアを経由しません。
関連するおすすめ:
JSONP を使用してクロスドメイン データを取得する 3 つの jQuery 方法
以上がインスタンス解析laravelクロスドメイン機能起動方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。