Ben*_*end 29 html wsgi cross-browser
我有这个HTML代码与多个inputs同名:
<input type="hidden" value="42" name="authors" />
<input type="hidden" value="13" name="authors" />
<input type="hidden" value="33" name="authors" />
Run Code Online (Sandbox Code Playgroud)
值的顺序很重要.HTML规范是否定义用户代理必须保留此顺序,如果是,那么常见(市场份额> 1%)浏览器是否遵循此定义?
如果有人知道WSGI,特别是Django是否保留了服务器端的订单,那么奖励积分:-)
谢谢!
Onk*_*org 35
是的,它们应按照它们出现的顺序按照html rfc发送
见8.2.1.form-urlencoded媒体类型:
这些字段按它们在文档中出现的顺序列出,名称与值分隔,
=并且两个对彼此分开&.可以省略具有空值的字段.特别是,未选中的单选按钮和复选框不应出现在编码数据中,但应显示具有VALUE属性的隐藏字段.
我也在html 4.0的规范中找到了:
对于url编码数据:
控件名称/值按它们在文档中出现的顺序列出.名称与值by分隔
=,名称/值对彼此分开&.
对于多部分数据(感谢@Chuck):
"multipart/form-data"消息包含一系列部分,每个部分代表一个成功的控件.部件以相同的顺序发送到处理代理,相应的控件出现在文档流中.部分边界不应出现在任何数据中; 如何做到这一点超出了本规范的范围.
HTML5规范制定application/x-www-form-urlencoded了text/plain一种算法,“对于表单数据集中的每个条目 [...] 追加”,产生相同的顺序。
至于multipart/form-data:“各部分的顺序必须与表单数据集中字段的顺序相同。具有相同名称的多个条目必须被视为不同的字段。”
如果没有获得从文档中导出的表单数据集的顺序,这将是不完整的:同一规范定义了用于构造表单数据集的算法,该算法“循环:对于控件中的每个元素字段,按树顺序,运行以下子步骤并且仅跳过或追加一个条目。
因此,对于兼容 HTML5 的用户代理,无论采用何种编码,不可跳过的参数都是树形排序的,并且允许重复。