預設情況下代理和/或負載平衡器是否會更改 HTTP 查詢字元串?
問題簡介
最近我正在研究一些請求籤名算法,結果出現了關於在隨後簽名的部分中包含查詢字元串的意見是“多樣化的”。
長話短說,反對在簽名字元串中包含查詢字元串的人的論點是查詢字元串可以更改(例如,可以更改值,可以刪除/添加參數,可以更改順序)。
此外,我從未在代理或負載均衡器中經歷過這種行為,即使我經歷過諸如隱藏
Authorization
標頭(例如通過 Apache/WSGI)、更改請求方法(通過負載均衡器,可能亞馬遜的伺服器會做這樣的事情)之類的事情。我知道可以使用一些自定義腳本/規則在反向代理或負載均衡器上啟用這種行為,但可以通過請求的任何部分來完成。基於應該包含查詢字元串的假設已經做了很多工作,而且不簽署請求中最重要的部分之一看起來很愚蠢。因此,我需要知道以原始形式包含查詢字元串(因為它在 URL 中傳遞)將來是否會成為問題。
實際問題
所以我的問題是:
任何代理或負載均衡器更改查詢字元串是否常見?這對我來說似乎很愚蠢。您知道預設情況下執行此操作的任何代理或負載平衡器(軟體或其安裝)嗎?
我確信在這種情況下,我們可以在代理/負載均衡器級別處理簽名驗證,但如果這在我們無法控制的中介中很常見,這可能是一個可行的論點。
請讓我知道你對它的了解。讓我知道,如果你有任何問題。
澄清一下,查詢字元串是指以下 URL 的“
?arg1=val1&arg2=val2
”部分:http://example.com/something/else?arg1=val1&arg2=val2
通過“更改查詢字元串”,我的意思是任何可能使其對於客戶端和伺服器看起來不同的操作(伺服器看到的查詢字元串與客戶端使用的查詢字元串不同)。
許多現代反向代理可以改變查詢字元串。但是我看不出負載平衡器或代理預設會這樣做的原因。
也許它使用 URI 進行粘性會話負載平衡,但這真的很愚蠢。
所以:不,我不知道任何負載均衡器,預設情況下會更改 uri 和參數。
我還沒有看到可以做到這一點的代理,但如果您不能按 IP 執行此操作,並且您希望它能夠工作,即使使用者禁用了 cookie,它也可以成為會話粘性的可行解決方案。