我们在内部构建API,并且经常传递具有多个值的参数。
他们使用:mysite.com?id = 1&id = 2&id = 3
而不是:mysite.com?id = 1,2,3
我赞成第二种方法,但我很好奇第一种方法实际上是不正确的吗?
我们在内部构建API,并且经常传递具有多个值的参数。
他们使用:mysite.com?id = 1&id = 2&id = 3
而不是:mysite.com?id = 1,2,3
我赞成第二种方法,但我很好奇第一种方法实际上是不正确的吗?
我不是HTTP大师,但据我所知,关于多个值的URL的查询部分没有明确的标准,通常由处理解析查询字符串的请求的CGI决定。
RFC 1738 第3.3节提到a searchpart
它应该追求 ?
但似乎没有详细说明其格式。
http://<host>:<port>/<path>?<searchpart>
我没有(懒得)检查哪个RFC标准定义它。 (任何了解这一点的人请在评论中留下参考。)但在实践中, mysite.com?id=1&id=2&id=3
方式已经是当表单包含重复字段(通常是复选框)时浏览器将如何生成。在此看到它的实际效果 w3schools示例页面。所以你使用的编程语言很可能已经提供了一些辅助函数来解析这样的输入并且可能返回一个列表。
当然,你可以采用自己的方法,例如 mysite.com?id=1,2,3
在这种特殊情况下,这一点都不错。但是您需要实现自己的逻辑来生成和使用这种格式。现在你可能需要或者不需要考虑自己处理一些极端情况,例如:如果输入结构不正确,如果 mysite.com?id=1,2,
?你是否需要发明另一个分隔符,如果逗号符号本身也可以是一个有效的输入,比如 mysite.com?name=Doe,John|Doe,Jane
?你会达到一个点,你将使用一个json字符串作为值,如 mysite.com?name=["John Doe", "Jane Doe"]
?等等。您的里程可能会有所不同。
在第一种方法中,您将获得一系列查询字符串值,但在第二种方法中,您将获得一串查询字符串值。
值得添加的是,服务器上的URL中的重复参数的不一致处理可能会导致漏洞,特别是 服务器端HTTP参数污染,有一个实际的例子 - 客户端Http参数污染 - Yahoo!经典邮件视频Poc。