Поддерживают ли браузеры порядок ввода с таким же именем в 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 серверную часть заказа: -)
Спасибо!
Ответы
Ответ 1
Да, они должны быть отправлены в порядке их появления в соответствии с HTML RFC
См. 8.2.1. Форма носителя с кодировкой urlencoded:
Поля перечислены в порядке их появления в документе с именем, отделенным от значения символом =
а пар, отделенных друг от друга символом &
. Поля с нулевыми значениями могут быть опущены. В частности, невыбранные переключатели и флажки не должны появляться в закодированных данных, а скрытые поля с атрибутами VALUE должны присутствовать.
Я нашел в спецификации для HTML 4.0 тоже:
Для URL-кодированных данных:
Имена/значения элементов управления перечислены в порядке их появления в документе. Имя отделяется от значения символом =
а пары имя/значение отделяются друг от друга знаком &
.
Для составных данных (спасибо @Chuck):
Сообщение "multipart/form-data" содержит серию частей, каждая из которых представляет успешный элемент управления. Детали отправляются агенту обработки в том же порядке, в котором соответствующие элементы управления отображаются в потоке документов. Границы детали не должны встречаться ни в одной из данных; как это делается, выходит за рамки данной спецификации.
Ответ 2
спецификация HTML5 для application/x-www-form-urlencoded
и text/plain
излагает алгоритм, который "для каждой записи в наборе данных формы [...] Добавить", что приводит к тому же порядку.
Как для multipart/form-data
: "Порядок частей должен быть таким же, как порядок полей в наборе данных формы. Несколько записей с тем же именем должны обрабатываться как разные поля".
Это не будет полным без получения порядка набора данных формы, полученного из документа: тот же самый spec определяет алгоритм для построения набора данных формы, что "Loop: для каждого поля элемента в элементах управления, в порядке дерева, выполните следующие подшаги и пропустите или добавьте запись.
Поэтому для пользовательских агентов, совместимых с HTML5, независимо от того, какая кодировка, не пропущенные параметры упорядочены по дереву, с допустимыми дубликатами.