我需要删除或忽略 X-Frame-Options header。我应该使用代理吗?

I need to remove or ignore the X-Frame-Options header. Should I use a proxy?

前提

我需要一种方法来删除 X-Frame-Options header from the responses from a few websites before those responses reach my browser

我这样做是为了能够正确渲染 my custom kiosk webpage, which has iframes that point to websites that don't want to show up in frames

我试过的

我尝试使用 squid and configuring its reply_header_access 选项为 deny X-Frame-Options header 设置代理,因为服务器收到它们,但由于某种原因无法正常工作正如预期的那样。我已经验证我确实在通过 Squid 代理,并且我已经验证 X-Frame-Options header 尽管我的 squid.conf 文件包含以下内容:

仍然存在
reply_header_access X-Frame-Options deny all

并使用 --enable-http-violations 选项构建了 squid(在我的 Mac 上使用 Homebrew)。

在追查了很多这种方法可能出错的地方之后,我决定 reply_header_access 选项不能完全按照我的想法去做(在返回之前修改 headers他们给客户)。

所以,我尝试使用另一个代理服务器。阅读 a Stack Overflow question asking about a situation roughly similar to mine, I decided I might try using the node-http-proxy 库后。但是,我以前从未使用过 Node,所以我很快就迷失了方向,陷入了不确定如何为我的特定目的实现该库的地步。

问题

使用 Node 似乎是一个可能非常简单的解决方案,那么我如何使用 Node 设置代理以从响应中删除 X-Frame-Options header?

或者,为什么 Squid 没有删除 header,即使我试图将其设置为这样做?

最终选择:有没有更简单的方法来实现我在 iframe 中呈现我想要的任何页面的最终目标?

我使用了代理,特别是 mitmproxy 和以下脚本:

drop_unwanted_headers.py:

import mitmproxy

def requestheaders(flow: mitmproxy.http.HTTPFlow) -> None:
    for each_key in flow.request.headers:
        if each_key.casefold().startswith("sec-".casefold()):
            flow.request.headers.pop(each_key)

def responseheaders(flow: mitmproxy.http.HTTPFlow) -> None:
    if "x-frame-options" in flow.response.headers:
        flow.response.headers.pop("x-frame-options")
    if "content-security-policy" in flow.response.headers:
        flow.response.headers.pop("content-security-policy")

要运行它,请执行以下操作: mitmproxy --script drop_unwanted_headers.py

还要确保您的代理设置指向代理服务器 运行ning(可能 localhost)所在的计算机并且使用了正确的端口。