Rails 4似乎将X-Frame-Options HTTP响应头的默认值设置为SAMEORIGIN.出于安全考虑,这是great,但它不允许应用程序的部分内容在不同域的iframe中可用.

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

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

但是,如何仅通过一个控制器或操作来覆盖它呢?

推荐答案

如果要完全删除标题,可以创建一个after_action过滤器:

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

请注意,在调试时,您需要清除某些浏览器(Chrome for me)中的缓存.

Ruby-on-rails相关问答推荐

`heroku Open`和`heroku run rake db:Migrate`不工作(";没有这样的文件或目录";)

包含字母和数字组合的正则表达式

Rails 5.1.7:Sprockets::Rails::Helper::AssetNotFound

是否可以使用 Turbo 帧更新 Rails 表单输入字段值?

复制我的活动时,活动描述没有复制过来

在 Rails 中进行 Http 基本身份验证

Rails:关于yields

使用brew 软件安装了 elasticsearch,但找不到配置文件

Rails:保存子对象时更新父对象

SQLite3::BusyException

耙路由错误缺少:路由定义上的操作键

渲染:动作和渲染:模板之间的区别

Rails(或 Ruby):Yes/No 而不是 True/False

Rails Active Admin css 与 Twitter Bootstrap css 冲突

Rspec 与 TestUnit

Ruby gem 命名约定

Rails:如何修复‘生产’环境缺少 secret_key_base

rails 获取应用程序根/基本 url

如何从另一个调用 Capistrano 任务?

如何在两个字段上对 ruby​​/rails 进行排序?