例如,我有一个标头,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
来考虑所有不同的排列。