Golang URL query contains semicolon 报错解决方案
报错信息
http: URL query contains semicolon, which is no longer a supported separator; parts of the query may be stripped when parsed; see golang.org/issue/25192
高版本http废除了分号做分隔符,会在http库中做报警输出,基础库代码如下:
解决方法有两种
1、http中不要用分号做分隔符,不要含有分号
2、调用库函数http.AllowQuerySemicolons()允许分号,解除报错
由于项目历史版本缘故,无法完全做到第1点,需要做第2点来补充。如果直接调用http.AllowQuerySemicolons,发现其就是简单粗暴将分号直接替换成&(代码如下),从而可能会引发后续http body解析报错
最终解决方案
1、将http内容中的分号替换,并记录位置
2、调用http.AllowQuerySemicolons,解除报警输出
3、将1中被替换的分号还原
4、调用handler处理函数,解析参数,进行业务逻辑
最终代码如下:
测试情况
分别请求
Health中输出如下:
测试OK。直接调用Health,引发了报错信息。用HandleRawQuerySemicolons包装的没有报错,且url内容正常。
参考文档
浙公网安备 33010602011771号