如何在Rails 4中重写控制器或动作的X-Frame-Options

Rails 4似乎为X-Frame-Options HTTP响应头设置了SAMEORIGIN的默认值。 这对安全性很好 ,但是不允许您的应用的某些部分在不同域的iframe可用。

您可以使用config.action_dispatch.default_headers设置覆盖全局X-Frame-Options的值:

 config.action_dispatch.default_headers['X-Frame-Options'] = "ALLOW-FROM https://apps.facebook.com" 

但是,你如何覆盖它只是一个单一的控制器或行动?

如果您想完全删除标题,则可以创build一个after_actionfilter:

 class FilesController < ApplicationController after_action :allow_iframe, only: :embed def embed end private def allow_iframe response.headers.except! 'X-Frame-Options' end end 

或者,当然,您可以编写after_action来将值设置为不同的值:

 class FacebookController < ApplicationController after_action :allow_facebook_iframe private def allow_facebook_iframe response.headers['X-Frame-Options'] = 'ALLOW-FROM https://apps.facebook.com' end end 

请注意,您需要在debugging时清除某些浏览器中的caching(Chrome for me)。