Как переопределить X-Frame-Options для контроллера или действия в Rails 4

Rails 4, по-видимому, устанавливает значение по умолчанию SAMEORIGIN для заголовка ответа HTTP X-Frame-Options. Это отлично подходит для безопасности, но это не позволяет доступным частям вашего приложения в iframe в другом домене.

Вы можете переопределить значение X-Frame-Options глобально, используя параметр config.action_dispatch.default_headers:

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

Но как вы переопределяете его только для одного контроллера или действия?

Ответ 1

Если вы хотите полностью удалить заголовок, вы можете создать фильтр 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 для меня), отлаживая это.