重复HTTP GET查询键的权威位置
我很难找到有关HTTP GET查询字符串重复字段的行为的权威信息,例如
http://example.com/page?field=foo&field=bar
特别是如果订单保留与否。 大多数面向Web的语言产生一个包含与关键字“字段”关联的foo和bar的数组,但是我想知道关于这一点是否存在权威性陈述(例如在RFC上)。 RFC 3986有3.4. Query
节3.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