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

在Heroku部署的Django应用中修改X-frame-options的方法

Django+Heroku环境下iframe嵌入的X-frame-options设置方案

一、修改位置与配置方式

1. 全局配置(Django settings.py)

Django默认通过SecurityMiddleware自动添加X-Frame-Options头,默认值为SAMEORIGIN(仅允许同域名嵌入)。要修改的话,直接在项目根目录的settings.py里添加或修改如下配置:

  • 允许所有外部网站嵌入:
    X_FRAME_OPTIONS = 'ALLOWALL'
    
  • 仅允许特定域名嵌入(比如你的个人展示网站):
    X_FRAME_OPTIONS = 'ALLOW-FROM https://your-website-domain.com/'
    

2. 单个视图精细控制

如果只需要让作品集页面允许嵌入,不用全局修改,可以在对应的视图函数里直接修改响应头:

from django.shortcuts import render

def portfolio_page(request):
    response = render(request, 'portfolio.html')
    # 允许所有网站嵌入
    response.headers['X-Frame-Options'] = 'ALLOWALL'
    # 或者指定单个域名
    # response.headers['X-Frame-Options'] = 'ALLOW-FROM https://your-target-domain.com/'
    return response

3. 现代浏览器兼容方案(推荐)

X-Frame-Options的ALLOW-FROM在部分现代浏览器中支持有限,更推荐使用Content-Security-Policy的frame-ancestors指令。同样在settings.py里配置:

# 先确保启用了ContentSecurityPolicyMiddleware
MIDDLEWARE = [
    # ... 其他中间件
    'django.middleware.security.ContentSecurityPolicyMiddleware',
    # ...
]

# 配置允许嵌入的域名,'self'表示允许自身域名,后面加外部目标域名
CONTENT_SECURITY_POLICY = {
    "frame-ancestors": ["'self'", "https://your-target-domain.com"]
}

二、Heroku端的注意事项

Heroku本身不会默认添加X-Frame-Options头,只要Django的配置生效,Heroku会直接传递这个响应头给客户端。不需要在Heroku控制台或额外文件里单独配置,除非你用了第三方HTTP头插件(这种情况直接在插件里修改即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:46:15