我今天开始工作的意图是找到最简单/最干净的方式来对具体的控制器操作执行SSL – 即与付款有关的任何事情.我认为没有理由在SSL上运行我的网站的其余部分.
我发现ssl_requirement gem似乎照顾了每个控制器的SSL操作没有太多困难,所以这很好.我还发现了this question,这似乎表明使用宝石处理SSL现在已经不合时宜了.
我还发现了几个答案/评论等,这表明一个网站应该只使用像Rack-SSL这样的Rack中间件来强制整个网站进入SSL模式.
所以现在我很困惑,不知道该怎么做.任何有经验的Rails 3和SSL的人都可以帮助我理解:
>我是否应该强制整个网站进行SSL,或只是按照某些行为.
什么事情要注意在Rails中使用SSL(以前从来没有这样做).
>如果每个控制器是要走的路径,使用ssl-require gem是否有意义,或者我是否应该使用新的路由和链接帮助器选项…
我非常感谢你的见解,这已经成为我瘫痪的决定.谢谢!
解决方法
首先,请注意,如果您不断切换到SSL,或者如果您使用SSL和其他内容(图像,css)提供某些内容(页面),某些浏览器将会弹出弹出警告.显然这对用户来说不是很好的体验.
>要求SSL到处都是唯一可能的缺点是性能.但是,除非你期待每天1000用户将会做许多不需要SSL的事情,这是微不足道的.
> SSL在Apache / Nginx /任何级别处理.因此,如果您决定将整个应用程序放在SSL之后,最重要的是在Webserver级别(将http:/yoursite.com重定向到https://yoursite.com).
如果出于性能考虑,您决定不将所有内容都放在SSL之后,那么在Web服务器级别处理SSL重定向仍然是有意义的.允许您的用户通过您的Web服务器,然后发送他通过半Rails堆栈,只是为了启动他重新启动重新是非常浪费.
当然,为了简单和知识领域,我们需要说明一下,这将建议您在Rails应用程序或中间件中处理重定向,因为它“知道”什么是安全和不安全的.
但是,这些都是衡量自己的事情.这取决于原始性能还是开发/维护的简单性更重要.
我通常会结束一个http://mysite.com的虚拟主机,将所有内容(或有时只有特定的uris)重定向到https://mysite.com/ $1.希望有帮助