Django中如何获取iframe加载时的父页面URL?
获取iframe父页面URL的解决方案
嘿,我之前处理过类似的需求,要拿到iframe的父页面URL,核心得靠浏览器发送的Referer请求头,下面给你详细说怎么实现:
核心方法:读取
HTTP_REFERER请求头
当父页面加载你的iframe时,浏览器默认会在请求头里带上Referer字段,值就是父页面的完整URL。在Django 1.11的视图里,你可以通过request.META.get('HTTP_REFERER')来获取这个值。举个实际的代码例子:from django.views.decorators.clickjacking import xframe_options_exempt from django.http import HttpResponseForbidden from django.shortcuts import render @xframe_options_exempt def data_view(request): # 获取父页面URL parent_url = request.META.get('HTTP_REFERER') # 执行你的URL过滤逻辑 allowed_domain = 'http://mycoolsite.com' if parent_url and parent_url.startswith(allowed_domain): # 允许加载,返回页面内容 return render(request, 'data.html') else: # 不允许加载,返回403禁止访问 return HttpResponseForbidden("This page can only be loaded in iframe from mycoolsite.com")注意事项
Referer头不是绝对可靠的:部分浏览器隐私设置、插件或者用户手动操作可能会阻止这个头的发送,或者伪造它。如果你的过滤涉及敏感数据访问,建议额外加一层验证(比如让父页面请求时生成一个带签名的token,iframe请求时携带这个token,后端验证签名有效性)。- 字段名要大写:Django里
request.META的请求头键都是大写的,并且前缀是HTTP_,所以必须写HTTP_REFERER,不能写成小写或者不带前缀的形式。 - 判空处理:如果
HTTP_REFERER不存在,get方法会返回None,所以一定要先判断是否存在再做后续逻辑,避免出现AttributeError。
内容的提问来源于stack exchange,提问作者jAC
相关产品推荐
相关产品推荐

