最近在 django 的项目中做相同域名内嵌网页时,出现了Refused to display 'http://127.0.0.1/' in a frame because it set 'X-Frame-Options' to 'deny'.
的错误,这使得我的内嵌网页无法显示在同域名的网页上。
因此这篇文章将会记录一些我查资料所了解它的情况。
X-Frame-Options HTTP响应头是用来给浏览器指示允许一个页面可否在
<frame>,<iframe>,<embed>
或者<object>
中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击。
根据 MDN 上面的介绍可以看出,X-Frame-Options是可以用来控制页面是否可以嵌入其他页面,并且还能避免点击劫持(clickjacking)。
X-Frame-Options: deny
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://example.com/
deny
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
sameorigin
表示该页面可以在相同域名页面的 frame 中展示。
allow-from uri
表示该页面可以在指定来源的 frame 中展示。
显而易见我们只需要将X-Frame-Options
设置为sameorigin
问题就解决了。
我们查看 setting.py 的配置可以看到在 MIDDLEWARE(中间件)设置里面看到加载点击劫持的中间件。因此我们只需要将X-Frame-Options
的默认值改一下即可。
X_FRAME_OPTIONS = 'SAMEORIGIN'
设置元标记没有作用
<meta http-equiv="X-Frame-Options" content="deny">