Сохраняют ли браузеры порядок ввода с одинаковым именем в GET/POST?

У меня есть этот 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 порядок на стороне сервера :-)

Спасибо!


person Benjamin Wohlwend    schedule 26.10.2010    source источник


Ответы (2)


Да, их следует отправлять в порядке их появления в соответствии с html rfc.

См. 8.2.1. Тип носителя с кодировкой form-urlencoded:

Поля перечислены в том порядке, в котором они появляются в документе, с именем, отделенным от значения =, и парами, отделенными друг от друга &. Поля с нулевыми значениями могут быть опущены. В частности, невыбранные переключатели и флажки не должны появляться в закодированных данных, но скрытые поля с присутствующими атрибутами VALUE должны появляться.

Я нашел в спецификации для html 4.0 тоже:

Для закодированных данных URL:

Имена/значения элементов управления перечислены в том порядке, в котором они появляются в документе. Имя отделяется от значения =, а пары имя/значение отделяются друг от друга &.

Для составных данных (спасибо @Chuck):

Сообщение «multipart/form-data» содержит ряд частей, каждая из которых представляет успешный элемент управления. Части отправляются агенту обработки в том же порядке, в котором соответствующие элементы управления появляются в потоке документов. Границы частей не должны встречаться ни в одном из данных; то, как это делается, выходит за рамки данной спецификации.

person Onkelborg    schedule 26.10.2010
comment
Такая же гарантия заказа дается и для составных бланков. - person Chuck; 27.10.2010
comment
Я все еще пытаюсь найти информацию о html 4.0, что rfc был для html 2.0. Но я не думаю, что они нарушают совместимость.. Все еще ищу - person Onkelborg; 27.10.2010
comment
Я нашел это. Обновление ответа - person Onkelborg; 27.10.2010

спецификация HTML5 для application/x-www-form-urlencoded и text/plain содержит алгоритм, который "Для каждой записи в наборе данных формы [...] добавляется", приводящий к тому же порядку.

Что касается multipart/form-data: "Порядок частей должен быть таким же, как порядок полей в наборе данных формы. Несколько записей с одинаковыми именами должны рассматриваться как отдельные поля".

Это было бы неполным без получения порядка набора данных формы, полученного из документа: та же спецификация определяет алгоритм для создание набора данных формы, который "Цикл: для каждого поля элемента в элементах управления в порядке дерева выполните следующие подшаги и только пропустить или добавить запись.

Поэтому для пользовательских агентов, совместимых с HTML5, независимо от кодировки, непропущенные параметры упорядочены по дереву, допускаются дубликаты.

person Lloeki    schedule 23.04.2015