HTTPSが静かに失敗するケース¶
原文¶
HTTPではリクエストが成功する HTTPSでは静かに失敗する
ログにエラーなし ネットワークエラーもなし
何を見落としたんだ?
要約¶
HTTPでは動くのにHTTPSで静かに失敗するバグ。エラーログもネットワークエラーも出ない「無音障害」のパターン。混合コンテンツ(Mixed Content)、証明書の問題、TLS終端後のプロキシ設定ミス等が原因として考えられる。
解説¶
なぜHTTPSで「静かに」失敗するのか¶
HTTPSが絡む障害は、通常のネットワークエラーと異なりブラウザやクライアントが黙ってリクエストをブロックすることがある。エラーが表示されないため原因特定が難しい。
主な原因と対処法¶
1. 混合コンテンツ(Mixed Content)¶
症状: HTTPSページからHTTPリソースをロードしようとしてブロックされる
# NG: HTTPSページからHTTPのAPIを呼ぶ
fetch('http://api.example.com/data') // ブロックされる(エラーなし)
# OK
fetch('https://api.example.com/data')
- ブラウザは混合コンテンツをエラーなしでブロックする(コンソールに警告は出る)
- バックエンドのAPIエンドポイントURLが
http://のままになっていないか確認
2. CORS + HTTPS の組み合わせ¶
症状: Preflight(OPTIONS)リクエストはHTTPSで通るが、実際のリクエストが静かに失敗
- TLS終端をするロードバランサー(ALB等)の背後でCORSヘッダーが失われるケース
- HTTPとHTTPSで異なるオリジンとして扱われる
3. 自己署名証明書 / 証明書エラー¶
症状: ブラウザはブロックするが、curl -k では通る
- 開発環境で自己署名証明書を使っている場合、クライアントが証明書エラーを黙って飲む設定になっていることも
4. TLS終端後の内部通信設定ミス¶
症状: ロードバランサーでTLS終端し、バックエンドへはHTTPで転送するはずが設定ミスで通信が壊れる
デバッグチェックリスト¶
- ブラウザの開発者ツール → Network タブで実際に送られているリクエストを確認
- コンソール → Mixed Content 警告がないか
- curl で直接叩く →
curl -v https://...で証明書・ヘッダーを確認 - プロキシログ → ALB / nginx のアクセスログを確認
- リクエストURLのスキーム確認 →
http://が混在していないか
→ 関連: HTTPSとCDNキャッシュ