首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby on rails 4应用程序在iframe中不起作用

Ruby on rails 4应用程序在iframe中不起作用
EN

Stack Overflow用户
提问于 2013-05-15 17:12:11
回答 4查看 31.4K关注 0票数 60

我如何通过iframe将我的rails应用程序嵌入到另一个网站?

它在RoR 3上运行得很好,但在RoR 4上就不行:

代码语言:javascript
复制
<iframe src="http://myrailsapp.com/" width="100%" height="50" id="rails_iframe">error!</iframe>

我尝试在我的控制器中使用verify_authenticity_tokenprotect_from_forgery选项...看起来是别的原因(但我不确定)。

upd。示例:http://jsfiddle.net/zP329/

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-18 12:41:02

这与Rails4在默认情况下启用额外的安全协议有关:http://weblog.rubyonrails.org/2013/2/25/Rails-4-0-beta1/

在远程站点中断iFrames的设置是X-Frame-Options。默认设置为SAMEORIGIN,防止内容跨域加载:

代码语言:javascript
复制
config.action_dispatch.default_headers = {
    'X-Frame-Options' => 'SAMEORIGIN'
}

您可以在此处阅读有关新的默认标头的信息:http://edgeguides.rubyonrails.org/security.html#default-headers

为了允许iFrame跨域工作,您可以更改默认标头以允许跨域X-Frame。

代码语言:javascript
复制
config.action_dispatch.default_headers = {
    'X-Frame-Options' => 'ALLOWALL'
}
票数 105
EN

Stack Overflow用户

发布于 2015-03-11 13:55:00

这对安全性有好处,但当您希望在iframe中调用您的action时,您可以这样做:

要允许所有原点,请执行以下操作:

代码语言:javascript
复制
class MyController < ApplicationController
  def iframe_action
    response.headers.delete "X-Frame-Options"
    render_something
  end
end

要允许特定原点,请执行以下操作:

代码语言:javascript
复制
class MyController < ApplicationController
  def iframe_action
    response.headers["X-FRAME-OPTIONS"] = "ALLOW-FROM http://some-origin.com"
    render_something
  end
end

使用:after_filter

当您需要在iframe中使用多个action时,最好创建一个方法并使用:after_filter调用它

代码语言:javascript
复制
class ApplicationController < ActionController::Base

  private
  def allow_iframe
    response.headers.delete "X-Frame-Options"
  end
end

在您的控制器中使用它,如下所示:

代码语言:javascript
复制
class MyController < ApplicationController
  after_filter :allow_iframe, only: [:basic_embed, :awesome_embed]

  def basic_embed
      render_something
  end

  def awesome_embed
      render_something
  end

  # Other Actions...
end

途径:

票数 51
EN

Stack Overflow用户

发布于 2021-06-17 20:39:09

更新:似乎ALLOW-FROM和ALLOWALL目前都是无效的"X-Frame-Options“标头值。唯一有效的两个是DENY和SAMEORIGIN,它们都不允许从另一个源访问。请参阅MDN文档:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

因此,看起来response.headers.delete "X-Frame-Options"是现在唯一能够在另一个网站上显示iframe内容的方法。但如果有人知道我所不知道的,我很乐意证明这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16561066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档