libhv icon indicating copy to clipboard operation
libhv copied to clipboard

修复 hv_parse_url 处理 '#' 和 '?' 顺序优先级 bug

Open House-Men opened this issue 8 months ago • 2 comments

解决类似“/xxx/xxx.htm#xxx?xxxx”的顺序导致解析结果有错误。

House-Men avatar Apr 15 '25 20:04 House-Men

根据 RFC 3986 标准定义,URI 的通用语法结构为:

scheme:[//authority]path[?query][#fragment]

(方括号表示可选,但顺序不可调换)

ithewei avatar Apr 16 '25 13:04 ithewei

根据 RFC 3986 标准定义,URI 的通用语法结构为:

scheme:[//authority]path[?query][#fragment]

(方括号表示可选,但顺序不可调换)

标准格式顺序确实是这样,但是#字符的出现代表后面可以是任意剩余字符,其中就可以出现?,而且代码 http/HttpMessage.cpp 中对 HttpRequest::Path() 的处理也是有?与#做了优先级处理的,经过主流浏览器地址栏与开发者工具观察请求报文也是可以证实确实存在优先级处理,#如果比?优先出现那么后面都属于fragment而不会识别成path=/xxx/xxx.htm#xxx,query=xxxx,fragment=空

House-Men avatar Apr 16 '25 16:04 House-Men