为了嵌入Django媒体文件,如何将X-FRAMES_OPTIONS设置为除拒绝之外的任何其他值



我正在开发一个过程,其中已经上传/生成的文件通过embed/iframe HTML标记显示在用户的面板中。这些文件是plotly生成的HTMLdiv(Python,服务器端生成(。

因此,当我尝试通过iframe查看这些文件时,如下所示:

<iframe
width="100%"
height="100%"
frameBorder="0"
src="http://127.0.0.1:8000/media/plots/20/plot-x-a-1.html"
/>

我通过开发人员工具得到以下错误:Refused to display 'http://127.0.0.1:8000/' in a frame because it set 'X-Frame-Options' to 'deny'.

正如您所知,通常可以通过完全禁用XFramesOptions中间件或将其设置为ALLOWALL来解决此问题。

问题是,既没有禁用这个中间件,也没有添加这些行:

X_FRAME_OPTIONS = 'ALLOWALL'
XS_SHARING_ALLOWED_METHODS = ['POST','GET','OPTIONS', 'PUT', 'DELETE']

有助于防止错误。我的猜测是,媒体流要求x_frames_options设置为AllowAllsameorigin,但没有关于如何做到这一点的文档。

我的推理正确吗?为什么在这样的更改之后,浏览器仍然会拒绝我的iframe请求?

注:目前的发展完全是地方性的。

根据Clickjacking Protection[Django-doc]上的文档,您应该将settings.pyX_FRAME_OPTIONS的值设置为:

X_FRAME_OPTIONS = 'SAMEORIGIN'

并确保启用XFrameOptionsMiddleware

MIDDLEWARE = [
...
'django.middleware.clickjacking.XFrameOptionsMiddleware',
...
]

最新更新