为啥以下代理不绕过 X-Frame-Options 标头?
Posted
技术标签:
【中文标题】为啥以下代理不绕过 X-Frame-Options 标头?【英文标题】:Why following proxy does not bypass X-Frame-Options header?为什么以下代理不绕过 X-Frame-Options 标头? 【发布时间】:2018-03-01 02:03:36 【问题描述】:我需要在 iframe 中显示一些网站,但我不能直接这样做,因为其中一些网站的标题 X-Frame-Options 设置为“SAMEORIGIN”。作为绕过这个的一种方法,我尝试在 apache 中使用反向代理。下面是我的apache配置
<VirtualHost *:80>
ServerName google.local
ProxyRequests Off
DocumentRoot /var/www/html/iframe-test
ProxyPass /test http://www.oracle.com/index.html
ProxyPassReverse /test http://www.oracle.com/index.html
ErrorLog /var/log/apache2/google.local-error.log
CustomLog /var/log/apache2/google.local-access.log combined
<Location *>
AllowOverride All
Order allow,deny
Allow from all
# Header always append X-Frame-Options "ALLOW-FROM all"
Header add test-header 'test'
</Location>
但我仍然无法在 iframe 中加载网站,并且收到错误 Load denied by X-Frame-Options: https://www.oracle.com/index.html does not permit cross-origin framing.
【问题讨论】:
【参考方案1】:上述配置的问题是代理仅适用于 http 协议。但从控制台错误消息中可以看出,外部站点实际上会自动将 http 重定向到 https。 因此,要处理 https 请求,只需在 apache 中启用 ssl 并打开 SSLProxyEngine。为此,
-
在终端上运行
sudo a2enmod ssl
在上述配置中添加“SSLProxyEngine On”行
<VirtualHost *:80>
ServerName google.local
ProxyRequests On
ProxyPreserveHost Off
SSLProxyEngine On
DocumentRoot /var/www/html/iframe-test
ProxyPass /test http://www.oracle.com/index.html
ProxyPassReverse /test http://www.oracle.com/index.html
ErrorLog /var/log/apache2/google.local-error.log
CustomLog /var/log/apache2/google.local-access.log combined
<Location *>
AllowOverride All
Order allow,deny
Allow from all
# Header always append X-Frame-Options "ALLOW-FROM all"
Header add test-header 'test'
</Location>
</VirtualHost>
【讨论】:
以上是关于为啥以下代理不绕过 X-Frame-Options 标头?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 webpack 代理不起作用(Access-Control-Allow-Origin 错误)?
在 Nginx 代理后面时,Keycloak Docker Instace 中的 X-Frame-Options 拒绝加载