Форма многостраничной загрузки: гарантирован ли заказ?
Похоже, что когда я использую html-форму для создания запроса POST-запроса: "Тип содержимого: multipart/form-data", поля всегда отображаются в том порядке, в котором они указаны в HTML. На практике, делают ли все браузеры?
Основная мотивация для желающих узнать это - так я могу выполнить проверку данных формы на стороне сервера без необходимости кэширования всего HTTP-запроса в ОЗУ | диск сначала.
Я знаю, что CGI, PHP и т.д. обычно ничего не будут делать, пока загрузка не завершится. Вероятно, потому, что в разделе 5.5 RFC 2388 рассматривается этот вопрос, говоря, что порядок не определен. Я работаю с высоко настраиваемой вилкой thttpd и обрабатываю код загрузки w/C, встроенный прямо на сервер. Поэтому мне все равно, что делают большинство серверов.
Что я хочу знать, если я выйду на конечность и возьму на себя заказ, сожгусь ли я этим предположением?
Возьмите эту форму, например:
<form id="formUpload"
target = "uploadTarget"
method = "post"
action = "/bin/upload"
enctype= "multipart/form-data" >
<input type="hidden" id="inUser" name="user" />
<input type="hidden" id="inDest" name="dest"/>
<input type="file" id="inFile" name="file" />
<input type="button" value="Upload" onclick="uploadFile();" />
<iframe id="uploadTarget" name="uploadTarget" src="" style="width:0;height:0;border:0px"/>
</form>
Функция uploadFile() будет заполнять поля пользователя и dest перед вызовом submit(). Я также хотел бы проверить серверную и пользовательскую сторону, перед recv()
- всем телом HTTP-запроса.
Ответы
Ответ 1
Да:
Части отправляются агенту обработки в том же порядке, что и соответствующие элементы управления отображаются в потоке документа. Границы частей не должны встречаться ни в одной из данных; как это делается, выходит за рамки этой спецификации.
http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4