我需要删除或忽略 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 iframe
s 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
)所在的计算机并且使用了正确的端口。
前提
我需要一种方法来删除 X-Frame-Options
header from the responses from a few websites before those responses reach my browser。
我这样做是为了能够正确渲染 my custom kiosk webpage, which has iframe
s 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
)所在的计算机并且使用了正确的端口。