在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
相关产品推荐
相关产品推荐

