URL 参数和查询字符串之间的区别是什么?

在 URL 中,我没有看到参数和查询字符串之间有什么不同。那么,两者的区别是什么? 什么时候应该使用其中一种?

304707 次浏览

< 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

这样的参数也可能出现在其他 URI 组件中,即 path2和片段中。就 URI 标准而言,使用哪个组件和哪种格式取决于您。

示例 URI 包含路径、查询和片段中的参数:

http://example.com/foo;key1=value1?key2=value2#key3=value3

1 URI 标准显示 关于查询组件:

查询组件通常用于以“ key = value”对的形式携带标识信息[ ... ]

2 URI 标准显示 关于路径组件:

[ ... ]分号(“ ;”)和等于(“ =”)保留字符通常用于分隔适用于该段的参数和参数值。逗号(“ ,”)保留字符通常用于类似目的。

参数是可以出现在 URL 路径中的键-值对,以分号字符(;)开始。

查询字符串出现在路径(如果有的话)之后,并以问号字符(?)开始。

参数和查询字符串都包含键-值对。

GET请求中,参数出现在 URL 本身中:

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

POST请求中,参数可以出现在 URL 本身中,也可以出现在数据流中(称为内容)。

查询字符串始终是 URL 的一部分。

使用 POST 方法时,参数可以隐藏在 form-data数据流中,因此它们可能不会出现在 URL 中。是的,POST请求可以将参数定义为 URL 中的表单数据 还有,这并不矛盾,因为参数可以有多个值。

到目前为止,我还没有找到这种行为的解释。我想,有时候从 POST请求中“取消隐藏”参数可能会很有用,甚至可以让处理 GET请求的代码与处理 POST的代码共享某些部分。当然,这只能用于 URL 中支持参数的服务器代码。

在您获得更好的见解之前,我建议您仅在 POST请求的 form-data数据流中使用参数。

资料来源:

每个开发人员都应该知道的关于 URL 的信息

RFC 3986

路径参数与查询参数

假设我们有基本的 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是带有 keyvalue的查询参数,它们的大多数用例是用于过滤请求

在 get 请求中传递数据的方式和遵从方式如下

帕拉姆斯:

Https://localhost:3000/user/5896544

从后端进入:

UserId = 5896544

查询字符串:

Https://localhost:3000/user?userid=5896544

从后端进入:

UserId = 5896544

我想,世界各国对命名法并没有达成共识,因为我看到一些人写的几篇文章使用不同的术语来指代同一个概念。

因此,从我的角度来看,我看到了这样的事情:

URL 参数 : URL 中的任何参数。它们有几种不同的形式:

  • Path 路线参数: 值,它是 URL 路径的一部分。
    • 例如: https://stackoverflow.com/questions/39266970 the 39266970将是问题的 ID
  • Query 绳子参数: URL 路径后面紧接着问号 ?之后的一对 key = value
    • 例如: https://stackoverflow.com/questions/39266970?slowClient=true,使用这个参数,您可以编写一个客户端计算机程序,以便对运行在慢速计算机中的浏览器执行任何特定操作

还有一个称为 的参数,它指示浏览器在给定页面上的着陆点。例如: https://www.i18next.com/translation-function/plurals#interval-plurals(导航,等待页面满载,然后观察浏览器如何直接进入网页的那一部分)