我在URL中看不到参数和查询字符串之间的差异。那么差异是什么呢?什么时候应该使用呢?
答案 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
数据流中使用参数。
来源: