CORS (Cross-Origin Resource Sharing) は、リソースの発信元とは異なるドメイン (オリジン) からリソースをリクエストする方法を制御するために Web ブラウザーによって実装されるセキュリティ機能です。これは、リソースへの不正アクセスを防ぎ、データの安全な交換を保証するため、最新の Web 開発、特に API を使用する場合に非常に重要です。
原点は、次の組み合わせによって定義されます:
例:
同一オリジン ポリシーは、Web ページ上のリソースが別のオリジンのリソースと対話する方法を制限するセキュリティ対策です。
SOP はセキュリティを確保しますが、正当なクロスオリジンリクエストを制限します。ここで CORS が登場します。
CORS は、サーバーが応答に特定の HTTP ヘッダーを含めることでリソースにアクセスできるユーザーを指定できるメカニズムです。これらのヘッダーは、ブラウザーがクライアントに要求されたリソースへのアクセスを許可するかどうかを示します。
ブラウザがクロスオリジンリクエストを行うと、サーバーの応答ヘッダーをチェックしてリクエストが許可されているかどうかを判断します。
主要な手順:
プリフライトリクエスト (オプション):
特定の種類のリクエストの場合、ブラウザは最初の OPTIONS リクエストを送信して、実際のリクエストが許可されているかどうかを確認します。
サーバーの応答:
サーバーは応答に適切な CORS ヘッダーを含めます。
ブラウザの決定:
ヘッダーがブラウザの期待と一致する場合、リソースは共有されます。それ以外の場合、ブラウザはリクエストをブロックします。
Access-Control-Allow-Origin: リソースへのアクセスを許可するオリジンを指定します。
例: Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: 許可される HTTP メソッドを指定します。
例: アクセス制御の許可メソッド: GET、POST、PUT
Access-Control-Allow-Headers: リクエストで送信できるカスタム ヘッダーを指定します。
例: Access-Control-Allow-Headers: Content-Type、Authorization
Access-Control-Allow-Credentials: 資格情報 (Cookie、HTTP 認証) を送信できるかどうかを示します。
例: Access-Control-Allow-Credentials: true
簡単なリクエスト:
プリフライトされたリクエスト:
認証済みリクエスト:
fetch("https://api.otherdomain.com/data", { method: "GET", headers: { "Content-Type": "application/json", }, credentials: "include", // For sending cookies or credentials }) .then(response => response.json()) .then(data => console.log("Data:", data)) .catch(error => console.error("Error:", error));
Access-Control-Allow-Origin: https://example.com Access-Control-Allow-Methods: GET, POST Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Allow-Credentials: true
const express = require("express"); const cors = require("cors"); const app = express(); // Use the CORS middleware app.use(cors({ origin: "https://example.com", // Allow only this origin methods: ["GET", "POST"], // Allow these HTTP methods credentials: true, // Allow credentials })); app.get("/data", (req, res) => { res.json({ message: "CORS request successful" }); }); app.listen(3000, () => console.log("Server running on port 3000"));
エラー: 要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。
エラー: 資格情報付きリクエストでは、「Access-Control-Allow-Credentials」が true である必要があります。
プリフライトリクエストが失敗しました:
CORS は、Web アプリケーションで安全かつ機能的にクロスオリジン リソースを共有するために不可欠な機能です。サーバー上の CORS ヘッダーを理解し、適切に構成することで、Web セキュリティ標準を遵守しながら、ドメイン間のスムーズで安全な通信を確保できます。
こんにちは、アバイ・シン・カタヤットです!
私はフロントエンドとバックエンドの両方のテクノロジーの専門知識を持つフルスタック開発者です。私はさまざまなプログラミング言語やフレームワークを使用して、効率的でスケーラブルでユーザーフレンドリーなアプリケーションを構築しています。
ビジネス用メールアドレス kaashshorts28@gmail.com までお気軽にご連絡ください。
以上がCORS を理解する: JavaScript での安全なクロスオリジン リソース共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。