![Haproxy 将请求 URL 中的空格替换为 %20,如何使用?](https://linux22.com/image/651335/Haproxy%20%E5%B0%86%E8%AF%B7%E6%B1%82%20URL%20%E4%B8%AD%E7%9A%84%E7%A9%BA%E6%A0%BC%E6%9B%BF%E6%8D%A2%E4%B8%BA%20%2520%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
例如,我有一个标头,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
来考虑所有不同的排列。