勝手にhttpsに飛ばされる?存在しないはずのHSTSを無視してhttpで通信する方法
HSTSとは?
HSTSとは?という方は下記の記事で説明していますので、ぜひご覧ください。
背景
もともとはhttp通信を行っているところでした。
サイトの設定等を確認しても、HSTSの設定は入っていません。
ですがある日のこと、http通信を行いたいのに、なぜか突然httpsに飛ばされて遷移できない状態になってしまいました。
というだいぶ特殊な状態での解決策です。
これから紹介する対処法は、HSTSが設定されているサイトには効果がないはずなのでご注意ください。
対処法
URLの後ろに「?」をつけて、そのあと何でもいいです、何か文字を追加してアクセスしてみてください。
例えば
http://localhost/index.html
を
http://localhost/index.html?1
のようにすると、httpで通信できるはずです。
HSTSのhttpsに飛ばすかどうかの判定で、アクセスしたURLがブラウザの設定内に存在するかを見ていると思いますが、
ブラウザに記録されているHSTSのURLの中にリクエストパラメタまでも含まれて保存されているのか、
はたまたキャッシュ対策と同じやり方なので、ブラウザが異なるURLだと認識してくれたのかは定かではありません。
ですが、これで解決できるのなら、ほぼ無限大の数リクエストパラメタを変更できるので、
直接的解決ではありませんが、アクセスはできたのでよかったです。
これは、もうhttpsにしろよ。という神からのお告げなのかもしれませんね・・・。
ほかの対処法
1.アクセスしているブラウザの「サイトの設定」を全期間削除します。
※ブラウザやバージョンによって名前は異なりますので、似たような名前を探してみてください
2.ブラウザを再起動します。
3.アクセス時にレスポンスヘッダに下記の値を入れて改ざんします。
Script-Transport-Security: max-age=0; includeSubDomains
こうすることで理論上はhttp通信が可能なはずだったんですが、私の場合は解決しませんでした。
意味合い的には、サブドメイン含めすべてを対象に、HSTSの有効期限を0秒に指定して、
現在保存されているHSTSの設定を上書きし、すぐにHSTSの設定を期限切れにさせるという意味です。
本来はこちらの方法で解決する予定でしたが、
私が経験したパターンは解決しなかったので、一番最初の方法を見つけました。
どういう原因でなっているかは環境などによると思うので、一概には言えませんが両者ともやってみたらどちらかは行けるのではないでしょうか。
まとめ
HSTSが設定されていないのにhttpsに飛ばされてアクセスできない場合は、
URL末尾に「?1」等の文字列を追加するか、
ブラウザの「サイトの設定」等を削除したうえでレスポンスヘッダを改ざんする方法で対処しました。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。