httpがhttpsに強制リダイレクトされるときの原因と対処法【備忘録】

最近、「http://example.com にアクセスしても、なぜか https://example.com に自動的に切り替わってしまう」という事象に遭遇しました。

サーバーではリダイレクトの設定なんてしてないのに…なんでだろう?

本記事では、このような現象が起こる原因と対策を自分用にまとめてみました。
よければご参考になさってください。

経緯

※今回の事象は以下に述べるディレクトリ構成とは無関係そうですが、一例としてご紹介します

今回はhttpとhttpsで別のディレクトリを見るレンタルサーバーで起きました。
多くのレンタルサーバーでは、SSL設定(https化)をすることで、httpでもhttpsでも同じWebサイトが見られる構成になっていることが多いです。
ですが中には、httpとhttpsで別々のディレクトリを参照する構成になっている場合もあります。

たとえば、

http → /home/ 例:http://example.comにアクセスするとこのディレクトリ以下が参照
https → /ssl/home/ 例:https://example.comにアクセスするとこのディレクトリ以下が参照

このように、httpとhttpsで別のコンテンツを表示させることも可能です。

今回、上記のような構成のサイトで、「http・httpsの同じパスに別々のファイルをアップロードし、確認しよう」というタイミングで事象に遭遇しました。

本題:なぜかhttpにアクセスしてもhttpsに飛ばされる

なんと、httpにアクセスしても自動的にhttpsにリダイレクトされてしまうという現象が発生。
(主にChromeとEdgeで再現も確認)

サーバー側で .htaccess や管理パネルでのリダイレクト設定などは一切していない状態。
また、リダイレクトチェッカーを3つほど試しましたが、どれも「httpでそのまま表示されるはず」という結果。にもかかわらず、実際のブラウザでは https に切り替わってしまいました。

ブラウザ側の原因?HSTSとHTTPS優先モードの影響

調べたところ、ChromeやEdgeなどのブラウザによって自動リダイレクトが勝手に起きる可能性があるようでした。
それぞれ、概要とリダイレクトを解除する方法を以下に記載します。

1.HTTPS優先モードをオフにする

…ブラウザによってはHTTPS 優先(ファースト)モード、HTTPS-Only モード等という名称。
ブラウザ側の機能で、有効になっていると、HTTPでアクセスしようとしたときに警告画面を表示したり、自動的にHTTPSへアクセスを試みる。

2.HSTS設定を削除する

…HSTS(HTTP Strict Transport Security)は、サイトが常にHTTPSを使用することを選択する方法のこと。
サーバー側管理者が設定するセキュリティポリシーで、一度HTTPSでアクセスしたユーザーのブラウザに「このサイトには今後もHTTPSでしかアクセスしないで」と指示する。(一度もアクセスしていないサイトでも、HSTS事前読み込みの対象になっている場合もある)

この設定が残っているとHTTPSにリダイレクトされてしまうため、該当ドメインをこの設定から削除する必要がある。(HSTS事前読み込みの対象ドメインだと、削除しても無理な場合もある模様)

3.ブラウザのキャッシュをクリアする or DevToolsで「キャッシュを無効」にしてアクセス

全てchromeでの設定方法を紹介します。

1.HTTPS優先モードをオフにする手順

chromeブラウザのアドレスバーに chrome://settings/security を入力してアクセスします。

以下の画面が表示されるので

赤丸部分の「常に安全な接続を使用する」が無効になっているかを確認します。有効になっていたらクリックして無効にしましょう。

2.HSTS設定を削除する手順

chromeブラウザのアドレスバーに chrome://net-internals/#hsts を入力してアクセスします。

こちらの画面の「Delete domain security policies」のDomainの入力欄に、該当のドメイン名を入力して[Delete]ボタンをクリックします。

3.ブラウザのキャッシュをクリアする手順

chromeブラウザのアドレスバーに chrome://settings/privacy を入力してアクセスします。

赤丸部分の閲覧履歴データを削除→対象の「期間」をそのサイトを前回訪れただろう時期を含めて設定し、キャッシュを削除します。

試したが、挙動は不安定

上記を一通り対策して検証したところ、以下のような状況でした。(自分のwin環境2台で確認)

ブラウザ通常ウィンドウシークレットモード
Chromehttp→httpsに飛ぶことがある(不安定)デバイスによってはhttpで表示可
EdgeChrome同様に不安定警告画面ののちhttp表示できる場合も
Firefox両方とも問題なくhttpで表示両方とも問題なくhttpで表示

シークレットウィンドウは通常と比較してリダイレクトされやすく、なかなかHTTPで開けなかったんですが、通常ウィンドウであれば、デベロッパーツールを使ってキャッシュを無効化しながら確認することで、比較的安定してHTTPの表示を確認することができました。
(特に私の場合、ブラウザタブでhttpsとhttpサイトを同時に確認していたので、devtoolツール開かないと更新するたびにリダイレクトされるようになったり等で混乱することに…)

なお、あくまで私の環境ではありますが、Firefoxでは特に問題なくHTTPページを表示できたため、最終的には主にFirefoxを使って動作確認を行いました。

まとめ:リダイレクトの原因はブラウザの「親切心」

  • httpにアクセスしようとすると、ブラウザ側等(HSTSやHTTPS優先モード、キャッシュ)の設定・影響で自動的に https に飛ばされることがある
  • httpとhttpsの領域が別ディレクトリという構成は、本事象には直接関係なさそう(他事例より)
  • 開発・検証中にhttpで見たい場合は、HTTPS優先モードの無効化やHSTS設定のリセットを試しつつ、通常ウィンドウでdevtool(キャッシュの無効化)を行いながら閲覧するのがおすすめ

WebサイトはHTTPSに対応しているにもかかわらず、URLの正規化等が行われておらず「http://」のまま更新されていないというケースは少なくないそう。
そうしたことから、サイト側がSSLへわざわざリダイレクトしないようで済むよう、ブラウザも「HTTPS優先モード」などを導入したり、ユーザーが一度HTTPSにアクセスしたサイトは自動でそちらにリダイレクトされるように取り組んできているようです。
特にシークレットウィンドウなどでは、より安全な通信を優先するのは納得ですね。

とはいえ、検証などでHTTPアクセスが必要な場合もあります。
そんなときは、上の「まとめ」の内容を試してみてください。いくつかの方法を試すと状況が変わることもあります。

ということで今回は、「HTTPにアクセスしたかったのに、勝手にHTTPSにリダイレクトされてしまった」というトラブルの備忘録でした。
今後同じような状況に出会ったときの参考になれば幸いです。