日常

ケ・セラ・セラ

Rails5でforce_sslのredirect status, HSTS header のコントロールが便利になる

読んだので簡単にまとめてみる試み。force_ssl 関連。

RailsHTTPS を強制する config.force_ssl = true' を設定すると、middleware stack にActionDispatch::SSL` が挿入されるわけだけれど、ActionDispatch::SSL は3つの責務を担うね。

  1. http request を https request に redirect する
  2. browser に伝えるために secure flag をセットする
  3. 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 }