浏览器是否在GET / POST上保留具有相同名称的输入顺序?

时间:2010-10-26 20:18:58

标签: html cross-browser wsgi

我的HTML代码包含多个input,名称相同:

<input type="hidden" value="42" name="authors" />
<input type="hidden" value="13" name="authors" />
<input type="hidden" value="33" name="authors" />

值的顺序很重要。 HTML规范是否定义用户代理必须保留此订单,如果是,那么常见(市场份额> 1%)浏览器是否遵循此定义?

如果有人知道WSGI,尤其是Django是否保留了服务器端的订单,那么奖励积分: - )

谢谢!

2 个答案:

答案 0 :(得分:35)

是的,它们应按照html rfc

按照它们出现的顺序发送

见8.2.1。 form-urlencoded媒体类型:

  

字段按照它们在文档中出现的顺序列出   名称与=的值分隔   并且每对分开   其他人&。具有空值的字段   可以省略。特别是,   未选中的单选按钮和   复选框不应出现在   编码数据,但隐藏字段   存在的VALUE属性应该。

我也在html 4.0的规范中找到了:

对于网址编码数据:

  

控件名称/值列在   它们出现在文档中的顺序。   名称与值分开   由=和名称/值对组成   由&分开。

对于多部分数据(感谢@Chuck):

  

“multipart / form-data”消息   包含一系列部分,每个部分   代表一个成功的控制。该   零件被发送到处理代理   以相同的顺序对应   控件出现在文档中   流。部分边界不应该   发生在任何数据中;这是怎么回事   完成的事情超出了这个范围   说明书

答案 1 :(得分:2)

application/x-www-form-urlencodedtext/plain的{​​{3}}列出了“对于表单数据集中的每个条目[...]附加”的算法,导致相同的顺序。

至于multipart/form-data“部分的顺序必须与表单数据集中的字段顺序相同。具有相同名称的多个条目必须被视为不同的字段。”

如果没有获得从文档派生的表单数据集的顺序,这将是不完整的:相同的规范定义了HTML5 spec的算法“循环:对于控件中的每个元素字段,在树中订购,运行以下子步骤,只跳过或追加一个条目

因此,对于符合HTML5的用户代理,无论编码如何,非跳过参数都是按树排序的,并且允许重复