代理和/或负载均衡器是否默认改变 HTTP 查询字符串?

代理和/或负载均衡器是否默认改变 HTTP 查询字符串?

问题介绍

最近在研究一些请求签名算法,发现关于在签名部分中包含查询字符串的意见是“多样化的”。

长话短说,反对在签名字符串中包含查询字符串的人的理由是查询字符串可以被更改(例如,可以更改值、可以删除/添加参数、可以更改顺序)。

此外,我从未在代理或负载均衡器中遇到过此类行为,尽管我遇到过隐藏Authorization标头(例如通过 Apache/WSGI)、更改请求方法(通过负载均衡器,可能是亚马逊的服务器会这样做)等情况。我知道可以使用一些自定义脚本/规则在反向代理或负载均衡器上启用此类行为,但可以使用任何请求的一部分。

很多工作都是基于应该包含查询字符串的假设而完成的,而且不签署请求中最重要的部分之一看起来也很愚蠢。因此我需要知道在原始格式中包含查询字符串(因为它在 URL 中传递)是否会成为未来的问题。

实际问题

我的问题是:

任何代理或负载均衡器更改查询字符串是否很常见?我觉得这很愚蠢。你知道任何代理或负载均衡器(软件或其安装)默认这样做吗?

我确信在这种情况下我们可以在代理/负载均衡器级别处理签名验证,但如果这在我们无法控制的中介机构中很常见,这可能是一个可行的论点。

请告诉我你对此了解的情况。如果你有任何问题,请告诉我。

需要澄清的是,请求参数我指的是?arg1=val1&arg2=val2以下 URL 中的“ ”部分:

http://example.com/something/else?arg1=val1&arg2=val2

并且通过“改变查询字符串“我的意思是任何可能使其对于客户端和服务器看起来不同的操作(服务器看到的查询字符串与客户端使用的查询字符串不同)。

答案1

许多现代反向代理可以更改查询字符串。但我不明白为什么负载平衡器或代理会默认这样做。

也许它使用 URI 进行粘性会话负载平衡,但这真的很愚蠢。

所以:不,我不知道任何负载均衡器,默认情况下改变 uri 和参数。

答案2

我还没有看到可以做到这一点的代理,但如果您无法通过 IP 执行此操作并且希望它在用户禁用 cookie 的情况下也能工作,那么它可以成为会话粘性的可行解决方案。

相关内容