Sinatra を使用していくつかの IFRAME コンテンツを返していますが、クロスドメイン src を許可したいと考えています。残念ながら、Sinatra は自動的に X-Frame-Options ヘッダーを応答に追加しています。どうすればそれをオフにできますか?
6 に答える
Sinatra はRack::Protection、特にヘッダーframe_options
を設定するオプションを使用します。X-Frame-Options
使用する保護を構成できます。Sinatra はそれらのほとんどをデフォルトでオンにします (セッションを使用している場合にのみ有効になるものもあれば、Rack::Protection 自体がデフォルトで有効にしないものもあります)。
ヘッダーを送信しないようにするには、次のようX-Frame-Options
に無効にする必要があります。frame_options
set :protection, :except => :frame_options
別の解決策、および私が本番環境で最終的に得たものには、モンキーパッチが含まれますRack::Protection::FrameOptions
。
# This monkeypatch is needed to ensure the X-Frame-Options header is
# never set by rack-protection.
module Rack
module Protection
class FrameOptions < Base
def call(env)
status, headers, body = @app.call(env)
[status, headers, body]
end
end
end
end
ここに示すオプションはどちらも、私のシナトラ アプリでは機能しませんでした。X-Frame-Options
最終的に、ヘッダーを変更してアプリが Facebook によってフレーム化されるようにするアフター フィルターを追加しました。
after do
headers({ 'X-Frame-Options' => 'ALLOW-FROM apps.facebook.com' })
end
Sinatra-1.3.3を使用した場合、「set:protection、:except =>:frame_options」の回答は機能しませんでした。
私は解決策をハックしなければなりませんでした。このmuthaをconfig.ruファイルに入れました。もちろん、ヘッダーは好きなように変更できます。
config.ru
class Rack::Protection::FrameOptions
def header
@header ||= {}
end
end