可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
How can I embed my rails app into another website via iframe?
It works nicely with RoR 3, but not with RoR 4:
I tried to use verify_authenticity_token
and protect_from_forgery
options in my controller... seems it's something else (but I'm not sure).
upd. Example: http://jsfiddle.net/zP329/
回答1:
This has to do with Rails 4 enabling additional security protocols by default: http://weblog.rubyonrails.org/2013/2/25/Rails-4-0-beta1/
The setting that breaks iFrames on remote sites is X-Frame-Options. By default, this is set to SAMEORIGIN, which prevents the content from being loading cross domain:
config.action_dispatch.default_headers = { 'X-Frame-Options' => 'SAMEORIGIN' }
You can read about the new default headers here: http://edgeguides.rubyonrails.org/security.html#default-headers
In order to allow the iFrame to work cross domain, you can change the default headers to allow X-Frame across domain.
config.action_dispatch.default_headers = { 'X-Frame-Options' => 'ALLOWALL' }
回答2:
Rails 4
added a default X-Frame-Options
HTTP header value of SAMEORIGIN
. This is good for security, but when you do want your action
to be called in an iframe
, you can do this:
To Allow all Origins:
class MyController
To Allow a Specific Origin:
class MyController
Use :after_filter
When you need to use more than one of your action
in an iframe
, it's a good idea to make a method and call it with :after_filter
:
class ApplicationController
Use it in your controllers like this:
class MyController
Via: Rails 4: let specific actions be embedded as iframes