フレーム内のリンクをクリックしても反応しない場合の原因はこれ

フレーム内のリンクをクリックしたときに、
FirefoxGoogle Chromeで反応がない場合。
またはInternet Explorerで以下のエラーがでる場合。



このコンテンツはフレーム内で表示できません
この Web サイトに入力する情報のセキュリティを保護するため、このコンテンツの発行者はフレーム内での表示を許可していません。

その原因は、HTTPヘッダの「X-Frame-Options」が原因です。



X-Frame-OptionsはHTTPレスポンスヘッダに指定するオプションヘッダのひとつ。レスポンスとして返されるコンテンツをフレームの内部に表示して良いかどうかを指定するといった機能になっている。


フレームから呼び出されている先のページに、X-Frame-OptionsでDENYが(外部サイトの場合はSAMEORIGINも)設定されていると、このような症状になるようです。


targetで_topを指定していたつもりが、_selfを指定していた箇所があり、いつの間にかリンクが開かなくなっていて焦りました(いつから変わったんだろう……)。
※_selfだと問題なく開きます


target属性は、HTML4.01 strict、XHTML1.0 strict、XHTML1.1で廃止となっていたため(HTML5では使えます)最近はあまり指定している人もいないと思うのですが、あえて使うのであれば気を付けないといけませんね。
痛い目にあいましたが、X-Frame-Optionsを学習したので結果としてヨシ(ということにしましょう!)


あとはフレームで勝手に呼び出されるのを防ぐため、X-Frame-Optionsを利用するのもいいですね!(って、これが本来の利用法…)