Menu
CoddyTech

オリジンとは

CoddyのNode.jsジャーニー「REST API」セクションの一部。レッスン 18/25。

通常、ブラウザーではページの JavaScript が同じオリジンからの API レスポンスを読み取れます。この同一オリジンルールにより、ページが別のサイトのデータを自由に読み取ることを防ぎます。CORS(Cross-Origin Resource Sharing)を使うと、サーバーはレスポンスヘッダーによって別のオリジンからのアクセスを許可できます。

ブラウザーページにはオリジンがあります。これはスキーム、ホスト、ポートを組み合わせたものです。同じオリジン上の異なるパスは、CORS の許可なしに API を共有できます。ホスト、スキーム、またはポートが変わると、別のオリジンになります。

new URL('https://board.example.com/tasks').origin;
// 'https://board.example.com'
new URL('https://board.example.com/help').origin;
// 同じオリジン

URL は、アドレスを名前付きの部分に読み取る組み込みクラスです。その origin プロパティにはパスとクエリは含まれません。指定されたページアドレスはスターターコード内で固定されています。この練習ではオリジンを比較します。次のステップでは、サーバーがオリジンをまたいでアクセスを許可できるようにします。

リクエストの Origin ヘッダーには、すでにこのオリジンの値が含まれています。次のレッスンではこのヘッダーを読み取ります。

challenge icon

チャレンジ

簡単

これは小規模な練習プロジェクトです。セットアップは用意されています。exercise.jsだけを編集してください。

指定されたアドレスのオリジンがページのオリジンと同じ場合は{"same":true}を返し、そうでなければfalseを返してください。POST {"address":"https://board.example.com/api/tasks"}を/resultに送信するとtrueになります。httpsをhttpに変更した場合、ホストを変更した場合、またはポートを変更した場合はfalseになります。この演習で扱うアドレスは、有効な絶対URLです。

最初のGET /resultでは、指定された例{"address": "https://board.example.com/api/tasks"}が使われます。他の入力を試すには、JSONボディを付けてPOST /resultを使用してください。

自分で試してみよう

const page = 'https://board.example.com/tasks';
export function exercise({ address }) {
    return { same: address === page };
}

REST APIのすべてのレッスン

自分で練習してみよう: Expressプレイグラウンド