URL参数和查询字符串有什么区别?

问题描述 投票:0回答:5

我在 URL 中没有看到参数和查询字符串之间有太大区别。那么,其中一种有什么区别,什么时候应该使用另一种呢?

url query-string url-parameters
5个回答
123
投票

查询组件由 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)是使用键值对的查询组件。 参数,如上面最后一个示例:

bar1=a&bar2=b

此类参数也可能出现在其他 URI 组件中,即路径²和片段。就 URI 标准而言,由您决定使用哪个组件和哪种格式。

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

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

¹ URI 标准规定 关于查询组件:

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

² URI 标准规定 关于路径组件:

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


50
投票

参数是可以出现在 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 中的参数的服务器代码。 

在您获得更好的见解之前,我建议您仅在

form-data

 请求的 
POST
 数据流中使用参数。

来源:

每个开发者都应该了解的关于 URL 的知识

RFC 3986


17
投票
两者都是GET请求中传递数据的方式。以下是一些差异 -

参数/查询参数/URL参数:

https://localhost:3000/user/5896544

后台访问:

请求.params.userId = 5896544

查询字符串:

https://localhost:3000/user?userId=5896544

后台访问:

请求.query.userId = 5896544


1
投票
我想世界上对于命名法还没有达成共识,因为我看到一些人写的几篇文章使用不同的术语来指代相同的概念。

所以,从我的角度来看,我看到这样的事情:

URL 参数:URL 中存在的任何参数。它们有几个不同的缺陷:

  • PathRoute 参数:属于 URL 路径一部分的值。
      例如:
    • https://stackoverflow.com/questions/39266970
       39266970 就是问题的 ID 
  • QueryString 参数:一对 key=value,出现在 URL 路径后面,紧接着问号 ?
    
    
      例如:
    • https://stackoverflow.com/questions/39266970?slowClient=true
      ,使用该参数,您可以对客户端计算机进行编程,以针对在慢速计算机中运行的浏览器执行任何特定操作
还有一个叫做

anchor 的东西,它是另一个参数,因为它指示浏览器在给定页面上集中登陆的位置。例如:https://www.i18next.com/translation-function/plurals#interval-plurals(导航,等到页面完全加载,然后看看浏览器如何直接转到网页的该部分)


-1
投票

路径参数与查询参数

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

© www.soinside.com 2019 - 2024. All rights reserved.