35

Sinatra を使用していくつかの IFRAME コンテンツを返していますが、クロスドメイン src を許可したいと考えています。残念ながら、Sinatra は自動的に X-Frame-Options ヘッダーを応答に追加しています。どうすればそれをオフにできますか?

4

6 に答える 6

80

Sinatra はRack::Protection、特にヘッダーframe_optionsを設定するオプションを使用します。X-Frame-Options

使用する保護を構成できます。Sinatra はそれらのほとんどをデフォルトでオンにします (セッションを使用している場合にのみ有効になるものもあれば、Rack::Protection 自体がデフォルトで有効にしないものもあります)。

ヘッダーを送信しないようにするには、次のようX-Frame-Optionsに無効にする必要があります。frame_options

set :protection, :except => :frame_options
于 2011-10-20T19:20:59.080 に答える
5

別の解決策、および私が本番環境で最終的に得たものには、モンキーパッチが含まれます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
于 2013-10-07T19:18:34.507 に答える
3

ここに示すオプションはどちらも、私のシナトラ アプリでは機能しませんでした。X-Frame-Options最終的に、ヘッダーを変更してアプリが Facebook によってフレーム化されるようにするアフター フィルターを追加しました。

after do
  headers({ 'X-Frame-Options' => 'ALLOW-FROM apps.facebook.com' })
end
于 2013-08-31T02:08:03.043 に答える
2

Sinatra-1.3.3を使用した場合、「set:protection、:except =>:frame_options」の回答は機能しませんでした。

私は解決策をハックしなければなりませんでした。このmuthaをconfig.ruファイルに入れました。もちろん、ヘッダーは好きなように変更できます。

config.ru

class Rack::Protection::FrameOptions
  def header
    @header ||= {}
  end
end
于 2013-01-28T06:03:53.870 に答える