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

时间:2016-09-01 08:55:00

标签: url query-string url-parameters

我在URL中看不到参数和查询字符串之间的差异。那么差异是什么呢?什么时候应该使用呢?

2 个答案:

答案 0 :(得分:48)

query component由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

list of allowed characters in the query component

查询组件的“格式”取决于URI作者。一个常见的约定(but nothing more than a convention, as far as the URI standard is concerned¹)是将查询组件用于键值对,也就是说。 参数 ,与上一示例相同:bar1=a&bar2=b

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

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

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

¹URI标准说about the query component

  

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

²URI标准说about the path component

  

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

答案 1 :(得分:15)

参数是键值对,可以出现在URL路径中,并以分号(;)开头。

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

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

GET请求中,参数显示在网址中:

<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数据流中使用参数。

来源:

What Every Developer Should Know About URLs

RFC 3986