Лекция 7 - Типы данных - MIME. CGI и серверные

advertisement
Лекция 7 - Типы данных - MIME. CGI и серверные
интерпретаторы. Базы данных и виды доступа.
Литература







Многоцелевое расширение почты Интернет (MIME) Семенов Ю.А. (ГНЦ ИТЭФ)
MEDIA (MIME) типы и подтипы. Содержание поля Content-Type в HTTP и SMTP
протоколах.
Расширение возможностей Internet-почты
Описание некоторых MIME
Не полный перевод почтового стандарта MIME (RFC1521)
Лабиринт Internet. Павел Храмцов, Электронинформ, 1996
Администрирование сети и сервисов InterNet. Учебное пособие, П.Б. Храмцов,
1997.
7.1 Что такое MIME?
MIME означает "Multipurpose Internet Mail Extensions" (Многоцелевые расширения
почтового стандарта Internet). Этот стандарт описывает, как пересылать по электронной
почте исполняемые, графические, мультимедийные, смешанные данные. Типичные
применения MIME - пересылка графических изображений, аудио, документов Word,
программ и даже просто текстовых файлов, то есть, когда важно, чтобы входе пересылки
не производилось никаких преобразований над данными. MIME также позволяет
размечать письмо на части различных типов так, чтобы получатель (почтовая программа)
мог определить, что делать с каждой из частей письма.
Хотя формат первоначально создан для электронной почты, он также используется для
службы WWW.
7.2 Для чего это нужно?
Так как файлы могут быть разными (.gif, .doc, .pdf ...), браузер должен понимать, что с
ними делать. Эту проблему решает стандарт "MIME - типы". Он сообщает клиенту, какой
тип файлов получен, например:
Content-type: image/gif (графика GIF)
Content-type: image/jpeg (графика JPG)
7.3 Как это работает?
Браузеры используют MIME-типы в своих HTTP-заголовках Accept для того, чтобы
сообщить, в каких форматах они предпочитают принимать данные (если сервер может
выдать файл в разных форматах). Серверы используют MIME-типы в HTTP-заголовках
Content-Type, чтобы сообщить клиенту о том, в каком формате передается прилагаемое
содержимое: то ли это HTML, который нужно форматировать, то ли это GIF или JPEG,
требующий визуализации, то ли это данные в формате PDF, для которого нужно
открывать внешнюю программу просмотра или использовать дополнительное
приложение.
Формат MIME-типа - тип/подтип. Можно использовать символ *; например, следующий
заголовок клиента означает, что принимаются документы во всех форматах:
Accept: */*
Следующий заголовок клиента означает, что принимаются все типы формата text
независимо от подтипа:
Accept: text/*
Серверы должны проверять данные о принимаемых типах, содержащиеся в заголовке
Accept, и по возможности выдавать данные соответствующего типа. Большинство
серверов определяют формат документа по расширению имени файла. Например, файлы с
расширениями .htm и .html - это файлы в формате HTML, поэтому сервер посылает такой
документ с типом text/html в заголовке Content-Type, пример:
Content-Type: text/html
Действия клиента при получении файла:
1. При получении клиентом файла, анализируется HTTP заголовок, если в нем
находится Content-Type, то клиент производит действие с файлом, учитывая эту
информацию.
2. Если записи нет, то клиент использует свой список MIME-типов, в котором тип
определяется по расширению имени файла.
3. Если тип в файле не найден, то клиент не знает что делать с этим файлом. Браузер
в таком случае предлагает вам выбрать сами программу, которой надо передать
файл.
7.4 Некоторые основные типы и подтипы MIME.
Первый стандарт - RFC1341 MIME (Multipurpose Internet Mail Extensions): Mechanisms for
Specifying and Describing the Format of Internet Message Bodies N. Borenstein, N. Freed June
1992
Последняя версия (состоит из четырех частей) :





RFC2049 (Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance
Criteria and Examples N. Freed, N. Borenstein November 1996)
RFC2048 (Multipurpose Internet Mail Extensions (MIME) Part Four: Registration
Procedures N. Freed, J. Klensin, J. Postel November 1996)
RFC2047 (MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header
Extensions for Non-ASCII Text K. Moore November 1996)
RFC2046 (Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types N.
Freed, N. Borenstein November 1996)
RFC2045 (Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet
Message Bodies N. Freed, N. Borenstein November 1996)
Text – текстовые типы.
Тип 'text' предназначен для пересылки текстовых материалов. Для обозначения языковой
кодировки текста используется параметр "charset" для некоторых подтипов, включая
подтип, "text/html", соответствующий простому (неформатированному) тексту.
Пример:
Content-Type: text/html; charset=windows-1251
Основные подтипы:
Content-Type: text/html - html текст.
Content-Type: text/plain - простой текст.
Content-Type: text/x-server-parsed-html - файл созданный с помощью SSI
Content-Type: text/css - файл содержащий стили - css
Multipart - данные состоят из несколько частей разных типов.
Основные подтипы:
Content-Type: multipart/mixed - несколько частей разных типов (используется в e-mail)
Content-Type: multipart/alternative - одна из частей (используется в e-mail)
Content-Type: multipart/x-mixed-replace - после загрузки следующая часть заменяет
предыдущею (используется в анимации)
Message - инкапсулированное почтовое сообщение (используется в e-mail)
Image - графические типы.
Основные подтипы:
Content-Type: image/gif - изображение gif.
Content-Type: image/jpeg - изображение jpeg.
Content-Type: image/tiff - изображение tiff.
Content-Type: image/bmp - изображение bmp
Audio - звуковые типы.
Основные подтипы:
Content-Type: audio/wav - звук в формате wav.
Content-Type: audio/midi - звук в формате midi
Content-Type: audio/mpeg - звук в формате mp3.
Content-Type: audio/vqf - звук в формате vqf
Content-Type: audio/x-pn-realaudio - звук в формате ram rm
Content-Type: audio/x-realaudio - звук в формате ra
Content-Type: audio/x-wav - звук в формате wav
Video – видео типы.
Основные подтипы:
Content-Type: video/avi - видео в формате avi.
Content-Type: video/mpeg - видео в формате mpeg.
Application - представляет данные какого-нибудь приложения.
application/msword – приняв такое сообщение, браузер запустит MS Word для открытия
этих данных. Если в системе нет MS Word, то браузер попросит сохранить данные в файле
имя файла может находиться в параметре name. Например:
Content-Type: application/msword; name=”Mydoc.doc”
Основные подтипы:
Content-Type: application/msword - программа MS Word
Content-Type: application/pdf - программа Acrobat Reader
Content-Type: application/rtf - программа MS Word
Content-Type: application/zip - разархиватор ZIP-архивов
7.5 Серверные приложения.
Приложения на сервер можно использовать для создания счетчиков, форумов, чатов,
обработки статистики, организации доступа к базам данных и т.д.
Для этого нужно чтобы клиенты могли запускать или работать с приложениями на
сервере.
7.5.1 Методы использования серверных приложений.





Запуск через CGI-шлюз. Эти приложения могут быть написаны на любых языках.
Преимущества:
- используются обычные программы (в случае Windows .bat, .exe и тд.)
- стандартизовано
Недостатки:
- при каждом вызове программы происходит ее запуск, что не есть быстро, и при
большом количестве запросов, появляется много запущенных программ.
Приложения, встроенные в сервер HTTP, как модули. Как правило, написанные на
С.
Преимущества:
- быстрота (т.к. всегда работает, не нужен запуск).
Недостатки:
- необходимость писать модуль для конкретного сервера HTTP.
Приложения, работающие через модули-шлюзы встроенные в сервер HTTP.
Преимущества:
- шлюз написан для конкретного приложения (например, для СУБД MySQL)
Недостатки:
- необходимость писать модул-шлюз для конкретного приложения.
Приложения, написанные на скриптовых языках (SSI, PERL, PHP, ASP и др.), для
выполнения которых должны быть встроенные интерпретаторы, как модули
сервера HTTP. Код этих приложений встраивается непосредственно в HTML
страницы. Сервер распознает эти страницы по расширению (.php, .asp, .shtml, .pl).
Преимущества:
- быстрота (выше чем у CGI, но ниже чем у модуля, т.к. интерпретаторы).
- удобно использовать
Недостатки:
- ограниченность возможностей
Приложения, работающие через Java Servlet.
Преимущества:
- платформо-независимость
- серверо-независимость
Недостатки:
- приложения на Java работаю медленнее
Приложения, написанные на Java и встроенные в HTML страницы (с расширением
.JSP (JavaServer Pages)). В принципе это аналог скриптовых языков работающих
через модуль (в место модуля в данном случае Java Servlet, а язык Java)
Преимущества:
- платформо-независимость
- серверо-независимость
- удобно использовать
Недостатки:
- приложения на Java работаю медленнее

7.5.2 Архитектура WWW сервера с учетом серверных приложений
Архитектура современного WWW сервера. На выходе с сервера всегда HTML, но
сгенерированный приложением.
7.5.3 Примеры запросов к приложениям
CGI
http://ipm.kstu.ru/cgi/search.cgi?text=сотрудники
В результате через CGI шлюз
1. Будет запущено приложение search.cgi
2. и будет передан запрос "text=сотрудники" приложению search.cgi
3. Приложение search.cgi вернет результат работы CGI-шлюзу
PHP
http://ipm.kstu.ru/cgi/search.php?text=сотрудники
В результате
1. Будет передан запрос "text=сотрудники" интерпретатору PHP.
2. Интерпретатор будет выполнять команды search.php.
3. Интерпретатор вернет результат работы WWW-серверу.
7.6 CGI-шлюз
Common Gateway Interface - стандарт для обмена данными между сервером и
прикладной программой, которая запускается из-под сервера.
7.6.1 Механизмы обмена данными
Механизм можно разделить на четыре части:




переменные окружения
командную строку
стандартный ввод
стандартный вывод.
7.6.1.1 Переменные окружения
При запуске внешней программы сервер создает специфические переменные окружения,
через которые передает приложению, как служебную информацию, так и данные.










SERVER_NAME - определяет доменное имя сервера.
GATEWAY_INTERFACE - определяет версию протокола CGI.
SERVER_PROTOCOL - протокол сервера.
SERVER_SOFTWARE - версия сервера.
SERVER_PORT - определяет порт, по которому осуществляется взаимодействие.
REQUEST_METHOD - определяет метод, значения GET, POST, HEAD и т. п.
PATH_INFO - передает программе путь с переменными, часть URL переданный
клиентом (т.е. относительный путь с переменными).
PATH_TRANSLATED - абсолютный путь, путь расположения программы на
диске сервера.
Пример для запроса http://ipm.kstu.ru/cgi-bin/search?text=ipm:
PATH_INFO = "/cgi-bin/search?text=ipm"
PATH_TRANSLATED = "/usr/local/etc/httpd/cgi-bin/search".
SCRIPT_NAME - относительный путь без переменных.
Пример для запроса http://ipm.kstu.ru/cgi-bin/search?text=ipm:
PATH_INFO = "/cgi-bin/search?text=ipm"
SCRIPT_NAME = "/cgi-bin/search"
QUERY_STRING - переменная определяет содержание запроса к скрипту (все что
после ?).
Пример для запроса http://ipm.kstu.ru/cgi-bin/search?text=ipm:
QUERY_STRING -------> "text=ipm"
Идентификация пользователя и его машины:





REMOTE_HOST - доменный адрес машины клиента.
REMOTE_ADDR - IP-адрес машины клиента.
AUTH_TYPE - тип идентификации пользователя.
REMOTE_USER - используется для идентификации пользователя.
REMOTE_IDENT - данная переменная порождается сервером, если он
поддерживает идентификацию пользователя по протоколу RFC-931.
Рекомендовано использование этой переменной для первоначального
использования скрипта.
Тип и длина передаваемой информации от клиента к серверу.


CONTENT_TYPE - определяет MIME-тип данных.
CONTENT_LENGTH - определяет размер данных в байтах.
Переменные заголовка HTTP.




HTTP_ACCEPT - поле ACCEPT.
HTTP_USER_AGENT - поле USER-AGENT.
HTTP_HOST - поле HOST.
и т.д.
7.6.1.2 Командная строка
Командная строка используется только при запросах типа ISIN-DEX.
Существует тэг
<ISINDEX prompt="Введите Ваш текст для поиска:">
вместо тэга <FORM> .
Запрос выделяется из URL и преобразуется в параметры командной строки.
Если в запросе нет знака "=", то запрос не ISIN-DE.
Параметры, выделенные из запроса, помещаются в массив параметров командной строки
argv.
Знаком разделения параметров является символ "+".
Пример:
запрос http://ipm.kstu.ru/cgi-bin/search?text+ipm+kstu является ISIN-DEX
командная строка будет выглядеть так search text+ipm+kstu
7.6.1.3 Стандартный ввод
Используется при передаче данных по методу POST. Объем передаваемых данных
задается переменной окружения CONTENT_LENGTH, а тип данных - переменной
CONTENT_TYPE.
7.6.1.4 Стандартный вывод
Используется для возврата данных серверу. При этом вывод состоит из заголовка и
данных. Заголовок сообщения должен отделяться от тела сообщения пустой строкой.
Обычно в ответах указывают только три поля HTTP-заголовка:

Content-type - тип MIME (Content-type: text/html)


Location - редирект на другой ресурс (Location: http://ipm.kstu.ru/index.php)
Status - код возврата (ошибки) (Status: 200 OK)
Пример вывода:
Content-type: text/html
<HTML>
<HEAD>
<TITLE>Тестовая страница</TITLE>
</HEAD>
<BODY>
Работает!!!
</BODY>
</HTML>
7.7 Серверные интерпретаторы
CGI технология самая старая, и в современное время лучше ее не использовать.
На смену ей пришли серверные интерпретаторы, такие как:



SSI - один из самых первых, и самый простой
PHP - достаточно развитый язык для написания скриптов
ASP - аналог от Microsoft
Код программ вставляется непосредственно в запрашиваемые страницы, по расширению
(.php, .asp, .shtml, .pl) сервер понимает, что страницу надо передать соответствующему
модулю-интерпретатору. Модуль-интерпретатор выполняет все команды, и результаты
передает серверу. Сервер передает их клиенту.
7.8 Базы данных и виды доступа
7.8.1 Доступ к базам данных на стороне сервера
7.8.1.1 Доступ к базам данных с помощью CGI
Что бы обеспечить доступ, нужно создать программу, которая будет работать между
сервером WWW и базой данных.
Или при использовании ODBC, между сервером WWW и ODBC.
Схемы доступа к базам данных через CGI
7.8.1.1 Доступ к базам данных с помощью модулей шлюзов
Чаще всего используются интерпретаторами.
Есть, например, модули php-mysql, perl-mysql.
Схемы доступа к базам данных с помощью модулей шлюзов
7.8.2 Доступ к базам данных на стороне клиента
Можно передать базу данных клиенту, а работать клиент будет на своей машине с
помощью переданного приложения, написанного на JAVA.
Схемы доступа к базам данных на стороне клиента
Преимущества:



Не загружается сервер (обработка данных происходит на стороне клиента)
Не загружается канал (если только база данных не очень большая)
Можно работать с базой без подключения
Недостатки:




Все данные оказываются у клиента (проблема защиты от копирования)
Клиентская машина может оказаться слишком слабой для обработки данных
Нельзя передавать большие базы данных
Владельцы серверов заинтересованы в большой посещаемости, что уменьшится.
Download