CORS (Cross-Origin Resource Sharing) とは、 Web ブラウザが異なるオリジン (プロトコル + ドメイン + ポートの組み合わせ) 間でのリソース共有を制御するセキュリティ機構です。同一オリジンポリシーを緩和し、正当なクロスオリジンリクエストを許可するために使われます。
たとえば、 https://app.example.com のフロントエンドから https://api.example.com の API にリクエストを送る場合、サブドメインが異なるため「クロスオリジン」となり、 API サーバー側で CORS ヘッダーを設定しないとブラウザがレスポンスをブロックします。設定するヘッダーは Access-Control-Allow-Origin で、許可するオリジンを指定します。
CORS で見落とされがちなのがプリフライトリクエストです。 GET/POST 以外のメソッドや、カスタムヘッダーを含むリクエストでは、ブラウザが本番リクエストの前に OPTIONS メソッドで「このリクエストを送っていいですか?」と確認します。サーバー側で OPTIONS リクエストに適切に応答しないと、本番リクエストが送信されません。 API Gateway や Lambda で CORS を設定する際に、この OPTIONS の処理を忘れるのが実務上最も多いトラブルです。
Access-Control-Allow-Origin: * (全オリジン許可) は開発時には便利ですが、本番環境では認証情報 (Cookie) を含むリクエストと併用できません。認証が必要な API では、許可するオリジンを明示的に指定し、 Access-Control-Allow-Credentials: true を設定する必要があります。
短縮 URL サービスの API を外部から呼び出す場合、 CORS の設定が必須です。関連書籍は Amazon でも探せます。