You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从iframe访问部署在Heroku上的Django网站?

解决Django+Heroku网站无法被iframe嵌入的问题

你的问题和ALLOWED_HOSTS无关,这个配置仅用于允许域名访问网站,而iframe被拒绝是浏览器的跨域嵌入限制导致的,核心原因是X-Frame-Options或Content-Security-Policy(CSP)响应头的限制,以下是具体解决办法:

1. 修改Django的X-Frame-Options设置

Django默认会设置X-Frame-Options: DENY,直接阻止所有iframe嵌入。你可以在settings.py中修改这个配置:

# 允许同域名嵌入,若需开放所有域名可临时设为'ALLOWALL'(生产环境不推荐)
X_FRAME_OPTIONS = 'SAMEORIGIN'

2. 配置Content-Security-Policy(CSP)允许iframe嵌入

如果需要更灵活地控制允许嵌入的域名,推荐用CSP替代X-Frame-Options(后者的全开放配置已被部分浏览器废弃)。在settings.py中添加如下配置:

CONTENT_SECURITY_POLICY = {
    # 可指定允许嵌入的具体域名,*表示允许所有域名(按需选择)
    'FRAME_ANCESTORS': ["'self'", 'http://localhost:8080', '*']
}

注:若你的Django版本低于3.0,需先安装django-csp包以启用CSP功能。

3. 处理混合内容问题

如果本地HTML页面使用HTTP协议,而Heroku网站是HTTPS,浏览器会阻止加载混合内容(HTTP页面嵌入HTTPS资源)。可通过以下方式解决:

  • 本地页面改用HTTPS启动(比如用http-server -S命令启动本地服务)
  • 测试阶段临时在浏览器设置中允许混合内容(生产环境必须统一用HTTPS)

4. 验证响应头配置

打开浏览器开发者工具(F12),访问你的Heroku网站,查看响应头:

  • 确认不存在X-Frame-Options: DENY
  • 确认Content-Security-Policy的frame-ancestors字段包含允许嵌入的域名

内容的提问来源于stack exchange,提问作者gks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:45:33