Генерация ответа

advertisement
Генерация ответа
Стандарт MIME
Стандарт MIME появился в электронной почте (e-mail) потому, что остро стала проблема пересылки по e-mail различных
данных в различных форматах.
Так как HTTP тоже работает с различными типами данных, то тоже использует MIME для своих нужд.
Типы MIME состоят из Типа и подтипа.
Например:
text/plain
где text — указывает на наличие текстового содержимого, а plain — уточняет его, как простой текст.
Приведенный ниже список (он далеко не полон, типов MIME огромное количество), описывает некоторые часто встречающиеся
типы:
¦ text/html
¦ text/plain
¦ text/richtext
¦ image/gif
¦ image/jpeg
¦ image/tiff
¦ audio/basic
¦ audio/32kadpcm
¦ audio/
¦ video/mpeg
¦ video/quicktime
¦ multipart/mixed
¦ multipart/alternate
¦ multipart/
¦ application/octet-stream
¦ application/msword
¦ application/postscript
¦ message/digest
Информация о MIME возможно пригодится вам и в том случае, если вы собираетесь работать из ваших скриптов с электронной
почтой, но и для WWW она не повредит. Особенно знание Content-Type:
Content-Type:
Состоит из типа и подтипа. Типы могут быть как стандартные так и экспериментальные, начинающиеся с префикса “x-”:
text — текстовые данные. Первый подтип, который включен сюда — это plain, что значит простой текст. Сюда же включен
самый ходовой формат html.
У типа text как и у многих типов могут быть параметры, главным из них является charset. Он как раз и указывает на раскладку
символов, которая применена в тексте, так что если вы хотите указать браузеру какую раскладку применять, то просто укажите
charset:
Content-Type: text/plain; charset=us-ascii
Content-Type: text/html; charset=iso-8859-1
Content-Type: text/html; charset=koi8-r
multipart — данные, которые могут состоять из нескольких частей различных типов данных. Поэтому параметром multipart
служит boundary, позволяющий указать разделитель.
Каждый фрагмент в многочастевом сообщении имеет свой Content-Type: (он может быть также multipart, то есть, допускаются
вложенные multipart, главное чтобы boundary были разными).
В электронной почте применяется больше multipart/mixed (основной подтип) и multipart/alternative (он отличается тем, что
показывается одна из альтернатив, например сообщение шлется в простом и HTML форматах, и почтовая программа
показывает часть, которую она способна отобразить).
В WWW-программировании распространен x-mixed-replace, который означает, что следующая часть должна заменить
предыдущую после подгрузки, что применяется для анимации.
Теперь о разделителе. Его надо выбирать так, чтобы он не встретился где-то в данных (то есть, что-то вроде
“diUr344rnmvforgefvrg923rghyj2”).
Когда вы задали разделитель, например boundary="boundary", то когда закончилась одна часть, вы должны выдать строку —
boundary, последняя часть — boundary, причем эти разделители должны быть на отдельной строке, а не сливаться с текстом.
Пример:
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="w23renff491nc4rth56u34-9449"
—w23renff491nc4rth56u34-9449
Content-Type: text/plain; charset="koi8-r"
Hello,World!!
—w23renff491nc4rth56u34-9449
Content-Type: text/html; charset="us-ascii"
<H1>Hello,Word!!</H1>
<HR>
<FONT size=+1 color=red>Hello people!</FONT>
—w23renff491nc4rth56u34-9449—
message — представляет инкапсулированное почтовое сообщение. Используется в e-mail, а не в WWW.
image — некоторое графическое изображение (чаще всего image/gif или image/jpeg).
audio — аудиоданные.
video — видеоданные.
application — бинарные данные какого-нибудь приложения. В том случае, если данное приложение может быть запущено,
браузер запускает его.
Например при поступлении данных application/msword браузер спросит: нужно ли запустить Word для просмотра документа.
При отсутствии нужного приложения браузер спросит: в каком файле сохранить данные.
Подтип octet-stream как раз и означает поток байт информации, который и используется по умолчанию (к сожалению не все
так гладко, известен глюк в Netscape Navigator’е, который вместо того, чтобы сохранить application/octet-stream, пытается его
показать как text/plain, и тогда если это сгенерировано из CGI — ни к чему хорошему не приводит)
Что касается application, то вы можете тут смело извращаться, используя x-типы данных.
Например:
application/x-fuck-to-netscape-navigator
Часто используемый параметр name позволяет указать имя файла.
Например:
Content-Type: application/msword; name="readme.doc"
Что полезно при получении файлов через HTTP, причем этот параметр может применяться и для других типов, таких как image
или audio.
Например:
Content-Type: image/gif; name="myfoto.gif"
Content-Transfer-Encoding:
Применяется больше в системе электронной почты и обозначает метод кодирования, которым были закодированы данные при
передаче сообщения.
Например:
7bit 8bit quoted-printable base64 binary x-типы
MIME-Version:
Указывает версию MIME.
Download