Русская Википедия:Multipart/form-data
Шаблон:Rq
Шаблон:Заголовок со строчной буквы
Шаблон:Карточка протокола
Тип содержимого multipart/form-data — это составной тип содержимого, чаще всего использующийся для отправки HTML-форм с бинарными (не-ASCII) данными методом POST протокола HTTP. Указывается в поле заголовка Content-Type
(тип содержимого) и следует правилам для составных MIME-данных в соответствии с RFC 2045. Для форм, не имеющих больших бинарных (не-ASCII) данных, может использоваться тип содержимого application/x-www-form-urlencoded
.
Сообщение multipart/form-data
содержит несколько частей, по одной на каждый задействованный в форме элемент управления.
Типичный пример: страницы отправки электронных писем через webmail со вложенными файлами. При отправке такого письма браузер формирует сообщение типа multipart/form-data
, внедряя в него как отдельные части, введённые пользователем, тему, адрес получателя, собственно текст письма, так и вложенные файлы.
Сообщение типа multipart/form-data
состоит из нескольких частей, каждая из которых представляет содержимое некоторого элемента формы. Части отправляются обрабатывающему агенту в том же порядке, в котором соответствующие управляющие элементы представлены в потоке документа с формой. Каждая часть должна содержать:
- Заголовочное поле
Content-Disposition
, имеющее значениеform-data
. - Атрибут
name
определяет имя соответствующего управляющего элемента. Имена управляющих элементов, изначально закодированные с использованием наборов символов, отличных от ASCII, могут кодироваться с помощью метода, описанного в RFC 2047[1].
Пример
Шаблон:Значимость раздела Пример отправки веб-формы с письмом со вложенными картинками:
POST /send-message.html HTTP/1.1 Host: webmail.example.com Referer: http://webmail.example.com/send-message.html User-Agent: BrowserForDummies/4.67b Content-Type: multipart/form-data; boundary=Asrf456BGe4h Content-Length: (суммарный объём, включая дочерние заголовки) Connection: keep-alive Keep-Alive: 300 (пустая строка) (отсутствующая преамбула) --Asrf456BGe4h Content-Disposition: form-data; name="DestAddress" (пустая строка) brutal-vasya@example.com --Asrf456BGe4h Content-Disposition: form-data; name="MessageTitle" (пустая строка) Я негодую --Asrf456BGe4h Content-Disposition: form-data; name="MessageText" (пустая строка) Привет, Василий! Твой ручной лев, которого ты оставил у меня на прошлой неделе, разодрал весь мой диван. Пожалуйста забери его скорее! Во вложении две фотки с последствиями. --Asrf456BGe4h Content-Disposition: form-data; name="AttachedFile1"; filename="horror-photo-1.jpg" Content-Type: image/jpeg (пустая строка) (двоичное содержимое первой фотографии) --Asrf456BGe4h Content-Disposition: form-data; name="AttachedFile2"; filename="horror-photo-2.jpg" Content-Type: image/jpeg (пустая строка) (двоичное содержимое второй фотографии) --Asrf456BGe4h-- (отсутствующий эпилог - пустая строка)
Следует отметить, что boundary
(граница) — это последовательность байтов, которая не должна встречаться внутри закодированного представления данных части. Обычно клиент (браузер) генерирует эту последовательность случайно или по специальному алгоритму.
См. также
Примечания
Ссылки
- RFC 7578Шаблон:Ref-en
- Шаблон:Cite web
- Шаблон:Cite web
- Спецификация языка HTML, intuit.ru, ISBN 978-5-94774-648-8, 17. Лекция: Формы
- HTML 4.01 Specification, Forms
- ↑ RFC 2047