При использовании HTML-формы для запроса POST «Content-Type: multipart/form-data» поля всегда отображаются в том порядке, в котором они перечислены в HTML. На практике это делают все браузеры?
Основная мотивация для того, чтобы знать это, состоит в том, что я могу выполнить серверную проверку данных формы без необходимости кэширования всего HTTP просить в оперативной памяти | диск.
Я знаю, что CGI, PHP и т.д. обычно ничего не делают до завершения загрузки. Вероятно, потому, что RFC 2388 раздел 5.5 решает эту проблему, говоря, что порядок не определен. Я работаю с высоко настроенной вилкой 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 ()' заполнит поля user & dest перед вызовом submit (). Прежде чем recv ()
- весь текст просить, необходимо проверить и сторону сервера.
Я новый студент Scheme/Racket, поэтому, пожалуйста, извините любые вопиющие синтаксические ошибки.
Сегодня в классе появилось, что список схем '(a, b, c)
должен быть недействительным, но когда мы его запустили, он вернулся:
>'(a . b . c)
(b a c)
Что не имеет смысла. Afaik, интерпретатор должен создать ячейку недостатков с автомобилем 'a и cdr' b, и 'c должен быть недействительным. При этом переводчик делает здесь что-то действительно странное. Это работает с # lang scheme, # lang racket и другими. Мы используем DrRacket в качестве переводчика.
Интересно, что
>'(a . b . c . d)
бросает исключение и умирает.
Я очень любопытен и хотел бы иметь возможность понять это, поскольку я новичок в языке. Google был очень бесполезным (вероятно, так как поисковые термины своего рода неоднозначны) Спасибо!
ПРАВКА:
Возможно, '(a. b. c)
интерпретируется с b как оператор инфикса. Например: > (4. +. 6)
возвращает 10. Возможно, интерпретатор использует b как оператор? то есть (b a c)
, как (+ 4 6)
, инфиксирующие.
Expermentation говорит:
>(define b +)
>(define a 4)
>(define c 6)
>(a . b . c)
10
Поэтому я думаю, что это решает проблему, но я до сих пор не до конца понимаю использование оператора «.» в данном случае. Я думаю, мы решили это, но любое другое понимание было бы очень ценно!