这是开发 DCRMv4 踩过的最大的一个坑 😛
4 月8 日
因为是在应用内,没有办法直接检查问题
下午,使用抓包来查问题
最开始发现有个 Referer 在 Header 中,误认为是服务器防盗链的配置问题
后来删了防盗链之后依然没有解决,将描述页面调到内网的 DCRM 页面进行测试
发现问题依旧,每次都是只下载完 HTML 后,不解析不显示,不请求其他任何静态文件
于是想到 iOS WebView 调试,然而 Cydia 里并不支持这玩意,又找到 ios_webkit_debug_proxy 这个神奇的工具,然而还是不能将 Cydia 里的页面映射出来
场面一度陷入尴尬,就先返校了
4 月 14 日晚上回家,又重新进行抓包测试,注意到了以前一直没有研究过的 Header: X-Frame-Options: SAMEORIGIN
立即搜集到了相关资料
X-Frame-Options 属性:
- DENY:浏览器拒绝当前页面加载任何 Frame 页面
- SAMEORIGIN:frame 页面的地址只能为同源域名下的页面
- ALLOW-FROM:origin 为允许 frame 加载的页面地址
于是不抱着任何希望的把 settings.py 里的
django.middleware.clickjacking.XFrameOptionsMiddleware
注释掉了,重新访问页面
问题解决了
后记
去除 django.middleware.clickjacking.XFrameOptionsMiddleware
只是一种临时的解决方法
搜寻了 Django 的官方文档,在不删除这一段的情况下,用下面的方法解决了这个问题
from django.http import HttpResponse from django.views.decorators.clickjacking import xframe_options_exempt @xframe_options_exempt def ok_to_load_in_a_frame(request): return HttpResponse("This page is safe to load in a frame on any site.")
关于更多的用法与解析可以看:https://docs.djangoproject.com/en/dev/ref/clickjacking/
文章最后修订于 2020年4月7日
评论 (0)