レスポンシブデザインをテストしようとしています。私はRails 4。
config.action_dispatch.default_headers = {
'X-Frame-Options' => 'ALLOWALL'
}
そしてそれは働いた。 Chromeコンソールでネットワーク要求をチェックアウトしました。次のようになります。
しかし、responsible.isやresponsinator.comのようなWebサイトでも、以下のエラーが表示されます。
Refused to display 'http://localhost:3000/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'. about:blank:1
どうしたの??
私はあなたと同じ問題を抱えていて、この問題の解決策を一晩中探しました。
私は最終的にそれが起こる理由を見つけました。 Chromeキャッシュが原因です。
header['X-Frame-Options']
はALLOWALL
ですが、機能しません。
「新しいシークレットウィンドウ」を開いて同じページに移動してみてください。
この問題は、テストで開発モードでのみ発生しました。 プロダクションモードで問題なく動作しました。
このヘッダー「X-Frame-Options」を削除してみてください。おそらくコントローラーでこのように:
before_filter :allow_iframe_requests
...
def allow_iframe_requests
response.headers.delete('X-Frame-Options')
end
Rails 4
追加 デフォルトのX-Frame-Options
SAMEORIGIN
のHTTPヘッダー値。これはセキュリティには良いですが、doaction
でiframe
を呼び出したい場合、これを行うことができます:
class MyController < ApplicationController
def iframe_action
response.headers.delete "X-Frame-Options"
render_something
end
end
class MyController < ApplicationController
def iframe_action
response.headers["X-FRAME-OPTIONS"] = "ALLOW-FROM http://some-Origin.com"
render_something
end
end
action
でiframe
を複数使用する必要がある場合は、メソッドを作成して:after_filter
で呼び出すことをお勧めします。
class ApplicationController < ActionController::Base
private
def allow_iframe
response.headers.delete "X-Frame-Options"
end
end
次のようにコントローラーで使用します。
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
ブラウザでハードリフレッシュを実行するか、別のブラウザを使用して変更を表示します
Firefoxでこのエラーonlyを取得し続ける同様の問題がありました。 @MochaHostがホストするPHP
Webページがあり、@HerokuがホストするRails
アプリを提供していましたRoRアプリには、iframe
Webページを指すPHP
のページがあり、これはFirefoxを除くすべてのブラウザーで機能します)。
特定の環境ファイルのすべてのリクエストにデフォルトのヘッダーを設定することで、問題を解決できました。
# config/enviroments/production.rb
config.action_dispatch.default_headers = { 'X-Frame-Options' => 'ALLOWALL' }
Edit(as sheharyar 提案)
理想的には、デフォルトのヘッダーを設定せず、iFrameでレンダリングする必要があるアクションに対してのみこれを行う必要があります。アプリ全体がiFrame内で提供される場合は、Originを明示的に指定する必要があります。
# config/enviroments/production.rb
config.action_dispatch.default_headers = { 'X-Frame-Options' => 'ALLOW-FROM http://some-Origin.com' }
ALLOW-FROM http://example.com
代わりに? Chrome Chrome [2]
[1] https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options
別の原因が見つかりました。 ALLOWALLまたは同様の修正が実装されていると仮定すると、次の落とし穴はhttps Webサイトでhttpコンテンツを使用しようとしているため、セキュリティリスクを引き起こし、mozilla、IEおよびおそらく他のブラウザーによってブロックされます。これを特定するのに6時間かかりました。共有することで誰かの痛みを減らすことができれば幸いです...
次の方法で確認できます。
解決策は、ソースにhttpsコンテンツがあるかどうかを尋ねるか、別のサプライヤーを見つけることです。
ref:
この変更をすべての環境で有効にする場合は、application.rbに配置します。