HTTP参数名称必须是唯一的吗?

时间:2013-08-27 03:58:37

标签: forms http

支持(如果有的话)向各种Web服务器发送具有相同名称的查询参数的程度如何?即

<form ...>
    <input name="a" value="va" />
    <input name="a" value="vb" />

大多数服务器会将此解释为数组还是其中一个值被破坏? 即,来自PHP的$ _REQUEST在访问“a”时会返回一个数组吗?或者这只会返回其中一个值?并且所有(体面的)Web服务器都需要支持这些输入并返回一个数组吗?

2 个答案:

答案 0 :(得分:2)

答案完全取决于您使用的框架。当查询URL参数的值时,某些框架返回给定名称的第一个参数。有些返回该名称的最后一个参数。其他人返回以逗号分隔的该名称参数列表。然而其他人则返回该名称的一系列参数字符串。

HTTP本身不提供有关参数名称唯一性的任何指导,甚至也不定义查询字符串的格式。 a=b&c=d语法仅仅是HTML表单使用的约定,但其他格式完全合法,确实在某些情况下使用。

答案 1 :(得分:0)

根据W3C HTML 4.01 spec,至少允许复选框输入控件共享相同的名称,以便“允许用户为同一属性选择多个值”(参见第17.2.1节)。对于单选按钮,实际上需要共享相同的名称,以便确定哪些属于同一组。 (但这导致只有一个值被发送到服务器。)HTML 4规范似乎没有说明是否允许为其他输入类型共享名称,但它应该与复选框的工作方式相同。

HTML 5规范确实在section 4.10.1.3中具体说明了“多个控件可以具有相同的名称”。鉴于HTML已经存在了很长时间并且HTML 5规范与4没有区别,至少对于表单而言,我认为可以肯定地说大多数现代浏览器/服务器将正确处理这种情况而不是破坏价值观。当然,最好的方法是在您关注的浏览器/服务器上自行尝试。