ИНФОРМАЦИЯ,    ДИЗАЙН,    ПЕРЕВОДЫ,    РЕКЛАМА   .   .   .
w a p - с а й т
Информационный портал
Сегодня:  
admin@aranea.ru
+79068922256

  aranea.ru || Спецификация HTML 4.01 | 17. Формы

17. Формы

17.13. Предоставление формы

17.13.1. Метод предоставления формы
17.13.2. Успешное управление
17.13.3. Обработка данных формы
   Шаг первый: идентификация успешного управления
   Шаг второй: построение набора данных формы
   Шаг третий: кодирование набора данных формы
   Шаг четвертый: предоставление закодированного набора данных формы
17.13.4. Типы содержания формы
   application/x-www-form-urlencoded
   multipart/form-data

Следующие разделы объясняют, как устройства вывода предоставляют данные формы для агентов, обрабатывающих форму.

17.13.1 Метод предоставления формы

Атрибут method для элемента FORM определяет метод HTTP, используемый для посылки формы обрабатывающему агенту. Этот атрибут может принимать два значения:

  • get: с помощью метода HTTP "get", набор данных формы присоединяется к URI, определенной атрибутом action (со знаком вопроса ("?"), как сепаратор) и этот новый URI посылается на обрабатывающий агент.
  • post: с помощью метода HTTP "post", набор данных формы включаются в тело формы и посылаются на обрабатывающий агент.

Метод "get" следует использовать, когда форма идемпотентная (т.е. не приводит к побочным эффектам). Многие поиски в базах данных не имею видимого побочного эффекта, и это делает их идеальными для применение метода "get".

Если сервис, связанный с обработкой формы, приводит к побочным эффектам (например, если форма модифицирует базу данных или подписку на сервис), необходимо использовать метод "post".

Обратите внимание. Метод "get" ограничивает значения набора данных формы до символов ASCII. Только метод "post" (с enctype="multipart/form-data") определяется для включения всего набора символов [ISO10646].

17.13.2 Успешное управление

Успешное управление является "корректным" ("valid") для предоставления. Каждое успешное управление имеет имя управления в паре с его текущим значением предоставляемого набора данных формы. Успешное управление должно определяться внутри элемента FORM и должно иметь имя управления.

Но:

  • Управление, которое деактивировано, не может быть успешным.
  • Если форма содержит больше, чем одну кнопку предоставления (submit button), то только активированная кнопка предоставления является успешной.
  • Все включенные флажки (checkboxe) могут быть успешными.
  • Для селективных кнопок (radio button), которые разделяют одно и то же значение атрибута name, только включенная кнопка может быть успешной.
  • Для меню управляющее имя предоставляется элементом SELECT, а значение дается элементами OPTION. Только выбранные варианты могут быть успешными. Когда вариант не выбран, то управление не успешное, и ни имя, ни какие-либо значения не предоставляются серверу, когда отсылается форма.
  • Текущее значение выбора файла - это список одного или более имен файлов. Во время передачи формы содержание каждого файла отсылается вместе с остальными данными формы. Содержание файлов пакетируется в соответствии с типом содержания формы.
  • Текущее значение управления объектом определяется выполнением объекта.

Если управление не имеет текущего значения, когда представляется форма, то устройства вывода не обязаны обращаться с ними как с успешным управлением.

Более того, устройствам вывода не следует рассматривать следующие управления как успешные:

  • Кнопка сброса (Reset button).
  • Элементы OBJECT, у которых установлены атрибуты declare.

Скрытое управление и управление, которое не визуализируется из-за установки стилевых таблиц, могут все же быть успешными. Например:

<FORM action="..." method="post">
<P>
<INPUT type="password" style="display:none"  
          name="invisible-password"
          value="mypassword">
</FORM>

все же приведет к тому, что значение будет в паре с именем "invisible-password", и передается вместе с формой.

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

Когда пользователь предоставляет форму (например, активируя кнопку предоставления (submit button)), то устройство вывода обрабатывает ее следующим образом.

Шаг первый: идентификация успешного управления

Шаг второй: построение набора данных формы

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

Шаг третий: кодирование набора данных формы

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

Шаг четвертый: предоставление закодированного набора данных формы

В заключении, закодированные данные посылаются на агент обработки, обозначенный в атрибуте 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".

17.13.4 Типы содержания формы

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

Обратитесь так же к разделу об обходе амперсандов в значениях атрибутов URI

application/x-www-form-urlencoded

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

  1. Имена и значения управления обходятся. Символы пробелов заменяются `+', и затем зарезервированные символы преобразуются, как это описано в [RFC1738], раздел 2.2: Не буквенно-цифровые символы заменяются на `%HH', знак процента и два шестнадцатиричных числа, представляющих код ASCII символа. Разрывы строки представляются как пара "CR LF" (т.е. `%0D%0A').
  2. Имена/значения управлений приводятся в списке по порядку, в котором они появляются в документе. Имя отделяется от значения `=', пары имя/значение разделяются друг от друга символом `&'.

multipart/form-data

Обратите внимание. Обратитесь к [RFC2388] для получения дополнительной информации о загрузке на сервер файлов, включая вопросы обратной совместимости, связи между "multipart/form-data" и другими типами содержания, вопросами выполнения и т.д.

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

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

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

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

Каждая часть, как ожидается, содержит:

  1. заголовок "Content-Disposition", чье значение является "данными формы" ("form-data").
  2. атрибут name, определяющий имя управления соответствующего управления. Имена управлений, оригинально закодированных в наборе символов не ASCII, могут быть закодированы с использованием метода, описанного в [RFC2045].

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

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

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

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

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

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

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

 <FORM action="http://server.com/cgi/handle"
       enctype="multipart/form-data"
       method="post">
   <P>
   What is your name? <INPUT type="text" name="submit-name"><BR>
   What files are you sending? <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

   ... contents of file1.txt ...
   --AaB03x--

Если пользователь выбрал второй файл (изображение) "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

   ... contents of file1.txt ...
   --BbC04y
   Content-Disposition: file; filename="file2.gif"
   Content-Type: image/gif
   Content-Transfer-Encoding: binary

   ...contents of file2.gif...
   --BbC04y--
   --AaB03x--4

← Назад | Вперед →
Copyright © 2006 -  aranea.ru