Rails5でforce_sslのredirect status, HSTS header のコントロールが便利になる
読んだので簡単にまとめてみる試み。force_ssl 関連。
Rails で HTTPS を強制する config.force_ssl = true' を設定すると、middleware stack に
ActionDispatch::SSL` が挿入されるわけだけれど、ActionDispatch::SSL は3つの責務を担うね。
- http request を https request に redirect する
- browser に伝えるために secure flag をセットする
- response に HSTS ヘッダを追加する
Rails 5 からは HTTP status を指定することができる(default: 301)。
refs.
config.force_ssl = true config.ssl_options = { redirect: { status: 307, port: 81 } }
こちらがマージされて、non-(GET or HEAD) なリクエストの場合には default で 307 となった
HSTS header の preload directive や、max-age の設定はこのようにできる
config.ssl_options = { hsts: { preload: true } } config.ssl_options = { hsts: { expires: 10.days } }
Rails5 では false にすると expires には 0 がセットされ、HTTPS として扱わなくなる
config.ssl_options = { hsts: false }