Форма многостраничной загрузки: гарантирован ли заказ?

Похоже, что когда я использую 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