Опубликован: 19.05.2006 | Доступ: свободный | Студентов: 10205 / 1645 | Оценка: 4.29 / 4.03 | Длительность: 22:29:00
ISBN: 978-5-94774-648-8
Лекция 17:

Формы

Обработка данных формы

Если пользователь отправил форму (напр., активацией кнопки submit ), ПА обрабатывает её следующим образом:

Шаг 1: Идентификация "действующих" ЭУ

Шаг 2: Создание набора данных формы

Набор данных формы - это последовательность пар имя ЭУ /текущее значение, создаваемая из действующих ЭУ.

Шаг 3: Кодирование набора данных формы

Набор данных формы кодируется в соответствии с типом содержимого, определённым атрибутом enctype элемента FORM.

Шаг 4: Отправка кодированного набора данных формы

Наконец кодированные данные пересылаются обработчику, определённому в атрибуте action с использованием протокола, указанного в атрибуте method.

Данная спецификация не определяет все соответствующие методы отправки или типы содержимого, которые могут быть использованы с формами. Однако, ПА HTML 4 должны поддерживать установленные соглашения в следующих случаях:

  • Если method - " get " и action - HTTP URI, ПА берёт значение action, добавляет ' ?' к нему, затем присоединяет набор данных формы, кодированный с использованием типа содержимого " application/x-www-form-urlencoded ". Затем ПА перенаправляет всё по гиперссылке на этот URI. В этом сценарии данные формы ограничены кодами ASCII.
  • Если method - " post " и action - HTTP URI, ПА проводит транзакцию HTTP " post ", используя значение атрибута action и сообщение, созданное в соответствии с типом содержимого, определённым атрибутом enctype.

Для любых других значений action или method поведение не определено.

ПА должен уметь принять ответ от транзакций HTTP " get " и " post ".

Типы содержимого формы

Атрибут enctype элемента FORM определяет тип содержимого, используемый при кодировке набора данных формы для отправки на сервер. ПА должен поддерживать типы содержимого, перечисленные ниже. Поведение для других типов содержимого не определено.

См. раздел об "Приложение B: Замечания относительно Исполнения, Разработки и Дизайна" .

application/x-www-form-urlencoded

Это тип содержимого по умолчанию. Формы, отправленные с содержимым этого типа, должны кодироваться так:

  1. Имена ЭУ и значения переводятся в escape-последовательности. Символы пробелов заменяются ' + ', и затем зарезервированные символы переводятся в escape-последовательности, как описано в "Индекс элементов" , раздел 2.2:

    Неалфавитные символы заменяются '%HH', знаком процента и двумя 16-ричными цифрами, представляющими ASCII-код символа. Символы новой строки представляются парами "CR LF" (напр., '%0D%0A').

  2. Пары имя/значение перечисляются в том порядке, в котором они появляются в документе. Имя отделено от значения знаком ' = ' и пары имя/значение отделены друг от друга знаком ' & '.

multipart/form-data

Примечание. См. в "Индекс элементов" информацию о подгрузке файлов, включая проблемы обратной совместимости, взаимоотношения между " multipart/form-data " и другими типами содержимого, вопросы функционирования и т.д.

Пожалуйста, прочтите дополнительно о "Приложение B: Замечания относительно Исполнения, Разработки и Дизайна" .

Типа содержимого " application/x-www-form-urlencoded " недостаточно для пересылки большого объёма данных бинарного типа или текста, содержащего не-ASCII символы. Тип содержимого " multipart/form-data " должен использоваться для отправки форм, содержащих файлы, не-ASCII данные и бинарные данные.

Содержимое " multipart/form-data " следует правилам всех составных MIME-данных, как описано в "Индекс элементов" . Определение " multipart/form-data " можно найти в регистре "Индекс элементов" .

Сообщение " multipart/form-data " содержит несколько частей, каждая из которых представляет "действующий" ЭУ. Эти части пересылаются обработчику в том же порядке, в каком соответствующие ЭУ появляются в потоке документа. Границы частей не должны появляться внутри каких-либо данных; то, как это достигается, находится за рамками данной спецификации.

Как и все многочастные типы MIME, каждая часть может иметь заголовок "Content-Type", который по умолчанию содержит "text/plain". ПА должны предоставлять заголовок "Content-Type" вместе с параметром "charset".

Каждая часть должна содержать:

  1. заголовок "Content-Disposition", значением которого является "form-data".
  2. атрибут name, определяющий имя соответствующего ЭУ. Имена ЭУ, кодированные в оригинале в не-ASCII "Представление документа HTML" , могут быть кодированы с использованием метода, описанного в "Индекс элементов" .

Таким образом, для ЭУ с именем "mycontrol", соответствующая часть будет определена:

Content-Disposition: form-data; name="mycontrol"

Как и в других передачах MIME, "CR LF" (т.е., '%0D%0A') используется для разделения строк данных.

Каждая часть может кодироваться, и заголовок "Content-Transfer-Encoding" предоставляется, если значение этой части не соответствует кодировке по умолчанию(7BIT) (см. "Индекс элементов" , раздел 6)

Если содержимое файла отправляется с формой, ввод файла должен идентифицироваться соответствующим типом содержимого (напр., "application/octet-stream" ). Если несколько файлов возвращено как результат единого ввода формы, они должны быть возвращены как "multipart/mixed", внедрённые в " multipart/form-data ".

ПА должен попытаться предоставить имя для каждого пересылаемого файла. Имя файла может быть определено параметром "filename" в заголовке 'Content-Disposition: form-data' или, в случае с нескольким файлами, заголовком 'Content-Disposition: file' подраздела. Если имя файла клиентской операционной системы не-US-ASCII, имя файла может быть приближено или кодировано с использованием метода "Индекс элементов" . Это подходит для всех тех случаев, когда, например, подгруженные файлы могут содержать ссылку друг на друга (напр., TeX файл и его ".sty" - дополнительное описание стиля).

Следующий пример иллюстрирует кодирование " multipart/form-data ". Предположим, у нас есть такая форма:

<FORM action="http://server.com/cgi/handle"
      enctype="multipart/form-data"
      method="post">
  <P>
  Как Вас зовут? <INPUT type="text" name="submit-name"><BR>
  Какие файлы Вы послали? <INPUT type="file" name="files"><BR>
  <INPUT type="submit" value="Send"> <INPUT type="reset">
</FORM>

Если пользователь вводит "Larry" в окне ввода текста и выделяет текстовый файл "file1.txt", ПА может выслать обратно следующие данные:

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain

... содержимое файла file1.txt ...
--AaB03x--

Если пользователь выделит второй (image) файл "file2.gif", ПА может создать части так:

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"
Content-Type: multipart/mixed; boundary=BbC04y

--BbC04y
Content-Disposition: file; filename="file1.txt"
Content-Type: text/plain

... содержимое файла file1.txt ...
--BbC04y
Content-Disposition: file; filename="file2.gif"
Content-Type: image/gif
Content-Transfer-Encoding: binary

...содержимое файла file2.gif...
--BbC04y--
--AaB03x--
Ирина Кириллова
Ирина Кириллова

Нажимаю на ссылку на дополнительный материал и дополнение к информации-меня возвращает на первую страницу лекции. Подскажите, что делать? Или дополнительный материал платный?