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

У меня есть этот HTML-код с несколькими input s с тем же именем:

<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 ]

35 голосов
/ 27 октября 2010

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

См. 8.2.1.Тип носителя в формате urlencoded:

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

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

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

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

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

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

2 голосов
/ 23 апреля 2015

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

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

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

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

...