我认为URL中的参数和查询字符串之间并没有太大的区别。那么这两者之间有什么区别,什么时候应该使用其中的一种?
我认为URL中的参数和查询字符串之间并没有太大的区别。那么这两者之间有什么区别,什么时候应该使用其中的一种?
查询组件由URI中的第一个?
符号表示。"查询字符串"可能是一个同义词(但不在URI标准中使用)。
以下是一些带有查询组件的HTTP URI示例:
http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b
查询组件的“格式”由URI作者决定。一个常见的约定(但就URI标准而言,仅仅是一种约定¹)是使用查询组件来进行键值对,也就是参数,就像上面的最后一个例子中所示:bar1=a&bar2=b
。
这样的参数也可以出现在其他URI组件中,即路径²和片段。就URI标准而言,你可以自己选择使用哪个组件和哪种格式。
带有路径、查询和片段参数的示例URI:
http://example.com/foo;key1=value1?key2=value2#key3=value3
¹ URI标准关于查询组件的说明:
[...] 查询组件通常用于以“键=值”对的形式携带标识信息 [...]
² URI标准关于路径组件的说明:
[...] 分号(“;”)和等号(“=”)保留字符通常用于分隔适用于该段的参数和参数值。逗号(“,”)保留字符通常用于类似的目的。
;
)开头。?
)开头。GET
请求中,参数出现在URL本身中:<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
POST
请求中,参数可以出现在 URL 本身中,也可以出现在数据流(也称为内容)中。form-data
数据流中,因此它们可能不会出现在 URL 中。是的,POST
请求可以将参数定义为表单数据和 URL 中的形式,这并不矛盾,因为参数可以具有多个值。POST
请求中“取消隐藏”参数可能会很有用,甚至让处理 GET
请求的代码与处理 POST
的代码共享某些部分。当然,这只能在支持 URL 参数的服务器代码中使用。POST
请求的 form-data
数据流中使用参数。两种方式都是通过GET请求传递数据的方式。以下是一些区别:
参数/查询参数/URL参数:
https://localhost:3000/user/5896544
后端访问:
request.params.userId = 5896544
查询字符串:
https://localhost:3000/user?userId=5896544
后端访问:
request.query.userId = 5896544
我猜想在命名上并没有全球性的共识,因为我看到了好几篇文章,它们使用不同的术语来指代同一个概念。
所以,从我的角度来看,我会这样认为:
URL 参数: 出现在 URL 中的任何参数。它们有多种不同的形式:
https://dev59.com/m1kS5IYBdhLWcg3w8acM
,其中 39266970 就是问题的 ID。?
之后的键值对。
https://dev59.com/m1kS5IYBdhLWcg3w8acM?slowClient=true
,可以通过该参数编程客户端计算机,在运行缓慢的计算机上运行特定的浏览器操作。还有一种叫做锚点的东西,它是另一个参数,它指示浏览器在着陆给定页面时要关注哪个部分。例如:https://www.i18next.com/translation-function/plurals#interval-plurals(导航,等待页面完全加载,然后看浏览器如何直接转到网页的那一部分)
路径参数 vs 查询参数
假设我们有基本URL https://gov.philippines.com
,路径参数示例如下:
https://gov.philippines.com/sign-up
https://gov.philippines.com/sign-in
基本上路径参数是/sign-up
或/sign-in
,简而言之,它是base-url
中扩展的路径,而查询参数则是;
https://gov.philippines.com/sign-up?for=membership
https://gov.philippines.com/sign-in?as=admin
?for=membership
和 ?as=admin
是带有 key
和 value
的查询参数,其主要用例是为了过滤请求。