表題の通りのメモ。rails で一部のパスだけ http 、他は https にしたいなーと思ってざっくり調べたのでした。
調べたこと
- Rails 3 では
config.force_ssl = true
としたら rack-ssl が使われる- Rails 4 では ActionDispatch::SSL が使われる
- ソース見た感じ、 ActionDispatch::SSL は rack-ssl を少しだけいじったものに見える
- rack-ssl には、ssl の対象にならない条件を exclude オプションに callable なオブジェクトを渡すことで指定できる
- Rails 4(ActionDispatch::SSL) では exclude オプションが無い
なぜ ActionDispatch::SSL に exclude オプションが入っていないか(削除されたか)というと、 rack-ssl(および ActionDispatch::SSL) で使われる HSTS はドメインごとの指定なので、そもそも rack-ssl (およびActionDispatch::SSL)は http/https の混在をさせる想定の設計じゃないんだよとのこと。
もし Rails 4 で exclude オプション使いたければ、 ActionDispatch::SSL と rack-ssl を差し替えてやればできそう。しかし上述の理由によりほぼ意味がない。
結論
http/https の混在環境を作りたければ ActionController の force_ssl を使うべき。