重复HTTP GET查询键的权威位置

我很难找到有关HTTP GET查询字符串重复字段的行为的权威信息,例如

http://example.com/page?field=foo&field=bar 

特别是如果订单保留与否。 大多数面向Web的语言产生一个包含与关键字“字段”关联的foo和bar的数组,但是我想知道关于这一点是否存在权威性陈述(例如在RFC上)。 RFC 3986有3.4. Query3.4. Query 3.4. Query ,它涉及键=值对,但没有说如何解释顺序和重复字段等。 这是有道理的,因为它依赖于后端,而不在该RFC的范围内。

虽然存在事实上的标准,但我只是出于好奇才想看到它的权威来源。


没有这方面的规格。 你可以做你喜欢的事。

典型的方法包括:首先给定,最后给定,数组,字符串连接,逗号等等。

假设原始请求是:

GET /blog/posts?tag=ruby&tag=rails HTTP/1.1
Host: example.com

然后,根据语言或框架, request.query['tag']应该产生多种选项:

request.query['tag'] => 'ruby'
request.query['tag'] => 'rails'
request.query['tag'] => ['ruby', 'rails']
request.query['tag'] => 'ruby,rails'

我可以确认对于PHP(至少在4.4.4和更新版本中),它的工作原理是这样的:

GET /blog/posts?tag=ruby&tag=rails HTTP/1.1
Host: example.com

结果是:

request.query['tag'] => 'rails'

GET /blog/posts?tag[]=ruby&tag[]=rails HTTP/1.1
Host: example.com

结果是:

request.query['tag'] => ['ruby', 'rails']

GET和POST数据的这种行为是相同的。


大多数(所有?)框架都不提供保证,因此假定它们将以随机顺序返回。

始终采取最安全的方法。

例如,Java HttpServlet接口:ServletRequest.html#getParameterValues

即使getParameterMap方法也没有提及任何有关参数顺序的信息(java.util.Map迭代器的顺序也不能依赖于它)。

链接地址: http://www.djcxy.com/p/2905.html

上一篇: Authoritative position of duplicate HTTP GET query keys

下一篇: JavaScript query string