先日行われたTPAC 2015で議論があったらしい「HSTS Priming」について軽く眺めてみる。
議論されているHSTS Priming自体は、EditorであるMike West個人のリポジトリ(URL)にて仕様が公開されている。
HSTS Priming
オリジンAで、以下のHTMLを含んでいるとする。
<script src="http://origin-b/widget.js"></script>
HTTPSでオリジンAに接続した時、仮にorigin-bがHSTSを使用するサイトだったとしてもorigin-bにアクセスしたことがなければ、もちろんMixed Contentとしてブロックされてしまいます。
HSTS Primingでは、Mixed Contentとしてブロックされる前に、ユーザエージェントはHSTS priming requestと言うHTTPリクエストを送信します。HSTS priming requestは以下のように、参照されているリソースのホストの"/"に対してHEADメソッドのHTTPリクエストを送ります。このHSTS priming requestはhttpsで送信されます。
HEAD / HTTP/1.1 Host: origin-b ...
Origin Bからのレスポンスに以下のようにStrict-Transport-Securityヘッダが付加されていれば、ユーザエージェントはHTTPリクエストをhttp://からhttps://へ安全に変更することができます。
HTTP/1.1 200 OK ... Strict-Transport-Security: max-age=10886400; includeSubDomains