よくある原因
静的HTMLでのCORSトラブルで最も多いのは、開発者が意識せずAPIのエンドポイントをHTMLに直書きし、そのAPIが他ドメインからの呼び出しを想定していないケースです。特にRapidAPIや個人APIサービスは、デフォルトで登録済みドメインのみを許可する設定になっているものが多く、ギガサイト便のURLを許可リストに加える必要があります。
Content-Typeをapplication/jsonに設定したfetchは自動的にプリフライト(OPTIONSリクエスト)を発生させます。チェックリスト作成の前提として、「自分のHTMLがどのメソッドとヘッダーでAPIを呼んでいるか」を把握しておくことが重要です。Networkタブを開いた状態でページをリロードし、OPTIONSが出ていればプリフライト必須の呼び出しです。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
自分側で確認すること
チェック1:ブラウザのコンソールにCORSエラーが出ていないか確認する。エラーメッセージに「blocked by CORS policy」と書かれていれば対象です。チェック2:HTMLのscriptタグ内でfetchしているURLをすべてリストアップし、それぞれが自分のドメインと異なるオリジンであるか確認する。
チェック3:使用しているAPIサービスのダッシュボードにログインし、「許可オリジン」または「Allowed Origins」の設定欄に共有先のURL(例:gigasite-bin.com のプレビューURL)を追加する。チェック4:追加後にブラウザキャッシュをクリアして再度APIコールが成功するか確認する。失敗する場合はNetworkタブでOPTIONSレスポンスのヘッダーを確認し、Access-Control-Allow-Originの値が正しいか見る。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
相手側で確認すること
共有相手がHTMLを受け取って「データが表示されない」と報告してきた場合、まずブラウザとOSのバージョンを聞きます。SafariとChromeではCORSエラーの出方が微妙に異なり、Safariは一部のプリフライトを独自に処理するため、Chromeで動いてもSafariで失敗するケースがあります。
相手にはコンソールのエラーメッセージをスクリーンショットで送ってもらうよう依頼するのが最短です。エラー文に含まれる「Origin」の値を確認し、その値がAPIサービスの許可リストに入っているかを突き合わせます。許可リストを自分で管理していない場合は、APIプロバイダへの問い合わせが必要です。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
再発防止の運用
外部APIを呼ぶHTMLを作るたびに同じチェックを繰り返さないよう、テンプレートHTMLの先頭コメントに「使用API一覧・許可オリジン登録日」を記録する習慣をつけます。3か月後に別のドメインで公開したときに登録漏れを防げます。
共有前の最終確認は、実際に共有するURLと同じオリジンで開いたブラウザでテストすることが原則です。ギガサイト便でURL発行後、そのURLをChromeのシークレットウィンドウで開いてコンソールを確認する手順を標準フローにしておくと、APIの動作確認と認証の確認を同時にできます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
よくある質問
許可オリジンにワイルドカード「*」を設定してもCORSエラーが出るのはなぜですか?
ワイルドカードはCredentials(Cookieや認証ヘッダー)付きのリクエストには使えないブラウザ仕様があります。credentialsを送る場合は具体的なオリジンを指定し、Access-Control-Allow-Credentialsもtrueにする必要があります。
ギガサイト便のプレビューURLはどの形式で許可リストに登録すればよいですか?
プロトコルとホスト名を含む完全な形(例:https://xxx.gigasite-bin.com)で登録します。末尾のスラッシュやパスを含めるとマッチしないサービスもあるため、ホスト名までで登録してください。
APIキーをHTMLに直書きしている場合、CORSを解決した後もセキュリティリスクはありますか?
はい。HTMLのソースを見た人はAPIキーを取得できます。プロキシサーバー経由に切り替えるか、ギガサイト便のパスワード認証・会社ドメイン認証で閲覧者を絞ることを検討してください。