Многочастная форма загрузки: гарантирован ли заказ? - PullRequest
21 голосов
/ 17 сентября 2011

Похоже, что когда я использую html-форму для выполнения запроса POST «Content-Type: multipart / form-data», поля всегда отображаются в том порядке, в котором они перечислены в HTML. На практике, все ли браузеры делают это?

Основной мотивацией для желания узнать это является то, что я могу выполнить проверку данных формы на стороне сервера без необходимости кэшировать весь HTTP-запрос в ОЗУ | диск первый.

Я знаю, что CGI, PHP и т. Д. Обычно ничего не делают, пока загрузка не завершится. Вероятно, потому что раздел 5.5 RFC 2388 решает эту проблему, говоря, что порядок не определен. Я работаю с сильно настроенным форком thttpd и обрабатываю код загрузки, встроенный прямо в сервер. Поэтому мне все равно, что делает большинство серверов.

Что я хочу знать, так это если я выхожу на конечность и принимаю приказ, я сгорю от этого предположения?

Возьмите эту форму, например:

  <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 () заполняет поля user & dest перед вызовом submit (). Я также хотел бы проверить серверную часть user & dest перед тем, как recv() обработать весь текст HTTP-запроса.

1 Ответ

23 голосов
/ 17 сентября 2011

Да

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

http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4

...