为啥以下代理不绕过 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 拒绝加载

nginx 中的 X-Frame-Options 允许所有域

Magnolia CMS:如何配置代理和绕过

为啥使用函数指针调用函数会绕过钩子?

X-Frame-Options 标头不是可识别的指令