Haproxy 将请求 URL 中的空格替换为 %20,如何使用?

Haproxy 将请求 URL 中的空格替换为 %20,如何使用?

例如,我有一个标头,GET /yo?title=What a cool day HTTP/1.1 我想用 替换空格%20 GET /yo?title=What%20a%20cool%20day HTTP/1.1。我想替换,因为带有 nginx 的后端不接受错误的 HTTP 请求。很遗憾,但我无法访问 nginx 来修补或修改生成此错误 URL 的代码。

我尝试过使用reqrep指令,但根据 haproxy 文档,它会用 替换search整个replace

答案1

根据在 StackOverflow 上发布,URL 中的空格无效,因此生成这些请求的任何东西都是有缺陷的。

我也浏览了 HAProxy 文档,但没有找到任何方法可以做到这一点。

实际上,如果你确定不会有超过 8 个空格,我想你可以使用reqrep如下方法:

reqrep ^GET\ ([^\ \t]*)\ ([^\ \t]*)\ ([^\ \t]*)\ ([^\ \t]*)\ ([^\ \t]*)\ ([^\ \t]*)\ ([^\ \t]*)\ ([^\ \t]*)\ ([^\ \t]*)    GET\ \1%20\2%20\3%20\4%20\5%20\6%20\7%20\8%20\9%20\ HTTP/1.1

但是这并没有考虑到少于 8 个空格的 URL,所以您要么需要?在每个子字符串引用搜索中添加 (以及后面的空格),要么设置 8reqrep来考虑所有不同的排列。

相关内容