在 URL 中,我没有看到参数和查询字符串之间有什么不同。那么,两者的区别是什么? 什么时候应该使用其中一种?
< em > < strong > 查询组件 由 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 标准而言,它只不过是一个约定1)是对键-值对使用查询组件,即。< strong > 参数 ,就像上面的最后一个例子: bar1=a&bar2=b。
bar1=a&bar2=b
这样的参数也可能出现在其他 URI 组件中,即 path2和片段中。就 URI 标准而言,使用哪个组件和哪种格式取决于您。
示例 URI 包含路径、查询和片段中的参数:
http://example.com/foo;key1=value1?key2=value2#key3=value3
1 URI 标准显示 关于查询组件:
查询组件通常用于以“ key = value”对的形式携带标识信息[ ... ]
2 URI 标准显示 关于路径组件:
[ ... ]分号(“ ;”)和等于(“ =”)保留字符通常用于分隔适用于该段的参数和参数值。逗号(“ ,”)保留字符通常用于类似目的。
参数是可以出现在 URL 路径中的键-值对,以分号字符(;)开始。
;
查询字符串出现在路径(如果有的话)之后,并以问号字符(?)开始。
参数和查询字符串都包含键-值对。
在 GET请求中,参数出现在 URL 本身中:
GET
<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
在 POST请求中,参数可以出现在 URL 本身中,也可以出现在数据流中(称为内容)。
POST
查询字符串始终是 URL 的一部分。
使用 POST 方法时,参数可以隐藏在 form-data数据流中,因此它们可能不会出现在 URL 中。是的,POST请求可以将参数定义为 URL 中的表单数据 还有,这并不矛盾,因为参数可以有多个值。
form-data
到目前为止,我还没有找到这种行为的解释。我想,有时候从 POST请求中“取消隐藏”参数可能会很有用,甚至可以让处理 GET请求的代码与处理 POST的代码共享某些部分。当然,这只能用于 URL 中支持参数的服务器代码。
在您获得更好的见解之前,我建议您仅在 POST请求的 form-data数据流中使用参数。
资料来源:
每个开发人员都应该知道的关于 URL 的信息
RFC 3986
路径参数与查询参数
假设我们有基本的 url https://gov.philippines.com,路径参数的例子;
https://gov.philippines.com
https://gov.philippines.com/sign-up https://gov.philippines.com/sign-in
https://gov.philippines.com/sign-up
https://gov.philippines.com/sign-in
所以基本上路径参数是 /sign-up或 /sign-in,简而言之,它是 base-url中的扩展路径,而查询参数;
/sign-up
/sign-in
base-url
https://gov.philippines.com/sign-up?for=membership https://gov.philippines.com/sign-in?as=admin
https://gov.philippines.com/sign-up?for=membership
https://gov.philippines.com/sign-in?as=admin
?for=membership和 ?as=admin是带有 key和 value的查询参数,它们的大多数用例是用于过滤请求
?for=membership
?as=admin
key
value
在 get 请求中传递数据的方式和遵从方式如下
帕拉姆斯:
Https://localhost:3000/user/5896544
从后端进入:
UserId = 5896544
查询字符串:
Https://localhost:3000/user?userid=5896544
我想,世界各国对命名法并没有达成共识,因为我看到一些人写的几篇文章使用不同的术语来指代同一个概念。
因此,从我的角度来看,我看到了这样的事情:
URL 参数 : URL 中的任何参数。它们有几种不同的形式:
https://stackoverflow.com/questions/39266970
https://stackoverflow.com/questions/39266970?slowClient=true
还有一个称为 锚的参数,它指示浏览器在给定页面上的着陆点。例如: https://www.i18next.com/translation-function/plurals#interval-plurals(导航,等待页面满载,然后观察浏览器如何直接进入网页的那一部分)