Генерация ответа Стандарт 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.