CORSリクエストテスター
ブラウザから任意のAPIに実際のクロスオリジンリクエストを送り、CORSで許可されるか確認します。プリフライトが必要になる条件や、読み取れるヘッダーも表示します。
CORSテスターとは?
このCORSテスターは、選択したメソッド、Content-Type、カスタムヘッダー、認証情報モードで、ブラウザから本物のクロスオリジンリクエストを送り、ブラウザがJavaScriptにレスポンスの読み取りを許可するかを報告します。送信前に、リクエストが「シンプル」か、OPTIONSのプリフライトが必要か、その理由も説明します。
CORSテスターの使い方
- テストするAPIのURLを入力します。
- メソッド、任意のContent-Type、
Authorization: Bearer xのような任意のカスタムヘッダーを選びます。 - アプリが credentials: include を使う場合は「Send cookies / credentials」にチェックを入れます。
- プリフライトの説明を読んでから、Send test requestを押します。
- 許可された場合は、ステータスとJavaScriptから見えるヘッダーを確認します。ブロックされた場合は、ブラウザのコンソールで正確なCORSエラーを確認します。
CORSテスターを使うべき場面
公開APIをブラウザアプリから呼び出せるかの確認や、特定のヘッダーでCORSエラーを再現するときに使います。オリジンは常にhttps://algokit.devのため、自分のドメインのみを許可しているサーバーは正しくブロックと表示されます。正確に一致させるには、自分のサイトからテストしてください。ブラウザは理由を明かさないため、CORSの失敗とネットワークやTLSのエラーを区別することはできません。
CORSテスターの仕組み
このツールは、ページのオリジン(https://algokit.dev)から mode: "cors" で fetch() を呼び出します。皆さんのフロントエンドコードとまったく同じ動きです。プリフライトの説明はFetch標準に従っており、GET/HEAD/POST以外のメソッド、form-urlencoded、multipart/form-data、text/plain以外のContent-Type、またはカスタムヘッダーがあると、OPTIONSのプリフライトが発生します。ブラウザがレスポンスをブロックすると、汎用のTypeErrorが投げられ、理由は意図的に隠されるため、ツールはコンソールを確認するよう案内します。
一般的な使用例
- SPAに組み込む前に、サードパーティAPIがAccess-Control-Allow-Originを送るか確認する。
- リクエストのどのヘッダーがプリフライトを引き起こすかを調べる。
- credentials: include が機能するか確認する(*ではなく特定のオリジンが必要)。
- Access-Control-Expose-Headers によってJavaScriptに公開されるレスポンスヘッダーを確認する。
セキュリティ注意事項
リクエストは、ブラウザから入力したURLへ直接送信されます。認証情報を有効にすると、そのサイトのCookieも送信されます。
よくある質問
curlでは動くのにブラウザでは失敗するのはなぜですか。
CORSはブラウザだけが強制します。curlやサーバーはこれを無視するため、curlからは動くAPIでも、Webページからは読み取れないことがあります。
何がプリフライトを引き起こしますか。
GET、HEAD、POST以外のメソッド、application/jsonのようなシンプルでないContent-Type、Authorizationのようなカスタムリクエストヘッダーです。
Access-Control-Allow-Origin: * はCookieと併用できますか。
いいえ。認証情報を使う場合、サーバーは正確なオリジンを返し、Access-Control-Allow-Credentials: true を送る必要があります。