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


90

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


1
您是否有上下文,因为据我所知,两者通常用于同一上下文-但您的情况可能取决于上下文。
艾伦·汉森

我没有特定的上下文,这是一个普遍的问题。在哪种情况下,我应该使用一种方法代替另一种方法。这两个必须有不同的用途。
康斯特

就个人而言-在变量或方法调用上下文中使用它们时,我主要使用word参数,而在URL上下文中使用字符串参数时则查询字符串。(例如:查询字符串被拆分为方法的参数)。但这只是语言,因此上下文和情况有所不同,我怀疑有人会在您“感觉”喜欢它时追捕您使用其中任何一种:)。
艾伦·汉森

Answers:


84

查询组件由第一指示?在一个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标准而言,仅是约定¹)是将查询组件用于键/值对,也就是。参数,如上面的最后一个示例:bar1=a&bar2=b

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

在路径,查询和片段中带有参数的示例URI:

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

¹URI标准说明了查询组件

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

²URI标准说明了路径组件

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


1
参数和查询不同。请参阅tools.ietf.org/html/rfc2396.html中的
cowlinator '18年

@cowlinator:(RFC 2396已过时,但是当前的标准RFC 3986对path组件中的参数说了类似的内容)。我没有声明它们是相同的,还是吗?URI作者可以在查询组件中指定参数(如我的回答所述),也可以在路径组件中指定参数(如您的参考文献中所述)-在两种情况下,这只是一个约定,而标准没有定义。-您是否建议更改我的答案?您认为OP意味着路径中的参数吗?
UNOR

30

参数是可以在URL路径内显示的键值对,并以分号(;)开头。

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

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

GET请求中,参数显示在URL本身中:

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

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

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

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

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

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

资料来源:

每个开发人员应该了解的URL

RFC 3986

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.