Конфигурирование сервера HTTPD и формат языка HTML
- Файлы в каталогах с документами
- Спецсимволы
- Заголовки
- Ненумерованный список (Unnumbered list)
- Пронумерованный список (Numbered list)
- Есть так же и более "мелкие" списки
- Списки с подзаголовками (Definition list)
- Физические стили
- Логические стили
- Управление цветами и фонтами
- Так выглядит обычная ссылка
- Так вставляют картинку
- Таблички
- Встроенная imagemap
- О протоколе HTTP/1.*
- SSI - Server Side Includes
- CGI - спецификация интерфейса между сервером httpd
- Формы и индексы
- CGI-скрипту передаются такие параметры
- Что мы посылаем клиенту обратно
- Фенечки
- Закрытие каталогов для внешних клиентов
- index.html Если просят выдать каталог, то выдают index если его нет, выдается просто оглавление каталога
- HEADER.html Его содержимое добавляется перед началом листинга
- README.html Его содержимое добавляется к концу листинга
- .htaccess Управляющий файл с локальными настройками текущей директории
Разобраться стоит с этими характеристиками: Alias - где то должна лежать расшифровка. а сервер будет ее подставлять. Вот только где ?
Нужно задавать так:& - & " - " > - > < - < >> - >> << - << (C) - © или © (R) - ® - - - - <= - <= >= - >= Extra space -<title> Заголовок всего документа </title>
Заголовок 2-го уровня
<a onClick="lon()" href="Dokument.html#A1.4.1.1">Ссылка на подраздел в документе</A>
<a href="#2" taget=newwindow>Ссылка открываемая в другом окне</A>
<A NAME = "A1.4.1.1">Так это место должно быть помечено в Документе</A>
Пример | Источник |
---|---|
|
<ul> <li> Одна позиция <li> Другая позиция </ul> |
Пример | Источник |
---|---|
|
<ol> <li> Одна позиция <li> Другая позиция </ol> |
Пример | Источник |
---|---|
<menu> <li> Одна позиция <li> Другая позиция </menu> | |
|
<dir> <li> Одна позиция <li> Другая позиция </dir> |
Пример | Источник |
---|---|
|
<dl [compact] > <dt> Название пункта <dd> Текст, расписывающий содержимое пункта <dt> Название пункта <dd> Текст, расписывающий содержимое другого пункта </dl> |
Пример
Преформатированный фрагмент текста
Источник
<pre> Преформатированный фрагмент текста </pre>
Пример
Преформатированный фрагмент текста в ширину 80
Источник
<pre width="80"> Преформатированный фрагмент текста в ширину 80 </pre>
Пример
Устанавливает общий отступ вправо. Вынесенный вправо фрагмент текста
Источник
<BLOCKQUOTE>
Устанавливает общий отступ вправо.
Вынесенный вправо фрагмент текста
</BLOCKQUOTE>
Горизонтальная черта <hr>
Окончание параграфа <p>
Жесткий конец строки <br>
<i></i> Itallic курсив текст
<u></u> Underline подчеркнутый Работает только в Netscape 3
<tt></tt> Typewriter текст с фонтом фиксированной ширины
<blink></blink>
<strike></strike>
<em></em> Emphasis. Ударение italic
<cite></cite> Titles of books. Цитата italic
<code></code>
Programm. Программный текст fixed
<kbd></kbd> User keyboard entry. bold fixed
<samp></samp> Status message fixed
<var></var> Variable. italic
<strong></strong> Strong emphasis. bold
<address></address> Выделяется адрес italic _BODY_ таги срабатывают только если расположены в самом начале документа
<body bgcolor="#000000" text="#ffffff" link="#FFFF00" vlink="#0000ff">
А так устанавливают собственные цвета во всем документе
<BODY bgcolor="#000000" LINK="#ff0000" text="#ffddbb" vlink="#aaaaaa">
А так делали траурные колера, когда протестовали.
Пример
Текст бОльшего размера, и покрашенный в красный цвет, с заданным типом фонта
Источник
<font size=+1 color=red face="Helvetica">
Текст большего размера, и покрашенный в красный цвет, с заданным типом фонта
</font>
<basefont size=3> Дальше пойдет текст с фонтом заданного размера
<bgsound src=soundfile.au loop=10> а так же background звук
<a onClick="lon()" href="Lightweight.html">Low impact<img src="kartinka.xbm">
<img src="kartinka.gif" align=top align=middle>
Если нужен текст сбоку от картинки (text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text)
<img src="kartinka.jpg" align=left hspace=100>
Отступ текста от картинки (text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text, text)
<img src="kartinka.gif" LOWSRC=kartinka_bw.gif АLT="Вверх" height=102 width=50>
- ALT - что написать, если картинка не читается,
- LOWRES - перед рисованием большой картинки загрузить эту - маленькую
Так подкладывают BACKGROUND
<BODY background="/icons/designer/bk.gif">
...
</BODY>
Пример
tr - задает строку Столбец | Столбец |
Источник
<table border=1 cellspacing=5 cellpadding=5 bgcolor=#00ffff>
<tr>
<td> tr - задает строку Столбец</td>
<td>Столбец</td>
</tr>
</table>
<caption>Внутри таблицы может быть такой таг, Подзаголовок?</caption>
Пример
Табличка фиксированной ширины, | не зависящая от размеров внутреннего текста |
Источник
<table width=300>
<tr>
<td> Табличка фиксированной ширины,</td>
<td>не зависящая от размеров внутреннего текста</td>
</tr>
</table>
Back to my home page moshkow@ipsun.ras.ru |
<IMG SRC="/images/navigation_bar.gif" WIDTH=468 HEIGHT=32 BORDER=0 USEMAP="#navmap" ISMAP>
<MAP NAME="navmap">
<AREA COORDS="0,0,63,31" HREF="/index.html">
<AREA COORDS="63,0,136,31" HREF="/comprod/mirror/index.html">
<AREA COORDS="136,0,203,31" HREF="/assist/customer_service">
<AREA COORDS="203,0,267,31" HREF="/toc.html">
<AREA COORDS="267,0,329,31" HREF="/search/index.html">
<AREA COORDS="329,0,415,31" HREF="/ads/index.html">
<AREA COORDS="415,0,466,31" HREF="http://cgi.netscape.com/cgi-bin/showframes.cgi">
<AREA COORDS="0,0,467,31" HREF="/index.html">
</MAP>
Клиент открывает tcp соединение с хостом www.host.com на порт (обычно 80) и говорит туда GET /local/url/file/name.html HTTP/1.0
- Host: www.host.com
- Http_referer: url_документа_на_котором_стоял_клиент
- Еще некоторое количество заголовков, которые рассказывают серверу, кто с ним имеет дело.
. . .
^M^J - пустая строка - конец заголовков - конец запроса
Обратно вываливается ответ сервера:
- http-шные заголовки на нескольких строках
- ^M^J - пустая строка
- Собственно запрошенный документ as is
$ telnet www 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET /index.html HTTP/1.0И потом два раза нажмите на Enter Полная спецификация лежит, например на www.apache.org
- Чтобы SSI выполнялись, необходимо задать в конфигурационных
файлах сервера:
/etc/httpd/conf/access.conf :------------------------ <Directory /home/httpd/docs> # "Включить" Options All # Options Includes /etc/httpd/conf/srm.conf :------------------------ AddType text/x-server-parsed-html .shtml
или дажеAddType text/x-server-parsed-html .html
- SSI отрабатываются только в файлах с расширением .shtml
Примеры:
<!--#exec cmd="ls -l" -->
<!--#include virtual="bottom.html" -->
<!--#element attribute=value attribute=value ... -->
The value will often be enclosed in double quotes; many commands only allow a single attribute-value pair.
The allowed ELEMENTS are:
- config - параметры парсинга
- errmsg - сообщение об ошибке, посылаемое клиенту
- sizefmt - формат размера файла
- timefmt - формат даты модификации файла
- var - напечатать имя переменной
- exec - выполнить shell или CGI-скрипт
- cgi - (%-encoded) URL relative path to the CGI script.
- cmd - выполнить shell
- fsize - напечатать размер файла
- file - относительное имя файла
- virtual -(%-encoded) URL-path relative файла
- flastmod - последнее время модификации файла
- include - вставить документ
- file - вставляемый файл
- virtual - URL - только на этом же хосте
- DATE_GMT The current date in Greenwich Mean Time.
- DATE_LOCAL The current date in the local time zone.
- DOCUMENT_NAME The filename (excluding directories) of the document requested by the user.
- DOCUMENT_URI The (%-decoded) URL path of the document requested by the user. Note that in the case of nested include files, this is not then URL for the current document.
- LAST_MODIFIED The last modification date of the document requested by the user.
The date is: <!--#echo var="DATE_LOCAL"--> The current version of the server <!--#echo var="SERVER_SOFTWARE"--> The CGI gateway version <!--#echo var="GATEWAY_INTERFACE"--> The server name <!--#echo var="SERVER_NAME"--> This file is called: <!--#echo var="DOCUMENT_NAME"--> This file's URI <!--#echo var="DOCUMENT_URI"--> The query string <!--#echo var="QUERY_STRING_UNESCAPED"--> This file was last modified: <!--#echo var="LAST_MODIFIED" --> The size of the unprocessed file <!--#fsize virtual="httpd.txt"--> sample.html was last modified <!--#flastmod virtual="httpd.txt"--> You are using <!--#echo var="HTTP_USER_AGENT"--> You came from <!--#echo var="HTTP_REFERER"-->
и внешними, вызываемыми программами - gateeway'ями. Сам CGI-script должен лежать в /home/httpd/cgi-bin тогда его находят (или в других каталогах, описанных в acces.conf Данные передаются в командной строке, через переменные окружения, и через стандартный ввод. Возвращаются на стандартный вывод, в начале должна стоять "волшебная строка"
Если добавить в конфигурационный файл
/etc/httpd/conf/srm.conf :------------------------ AddType application/x-httpd-cgi .cgi
То CGI-скрипты можно будет клась в любой подкаталог дерева документов - с расширением .cgi
- Войти в файл, и спозиционироваться на строку с шаблоном "cl"
http://hoohoo.ncsa.uiuc.edu/file.html#cl - Request for a CGI script with no extra path information and no query.
http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi - Request for a script with extra path information, and no query.
http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi/extra/path - Request for a script with no extra path information, and an ISINDEX query.
http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi?query - Request for a script with extra path information as well as an ISINDEX query.
http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi/extra/path?a+query
Вызывается одна и та же программа, но ей передается 0,1,1 или 2 аргумента: extra path - "добавочный маршрут", идущий вслед за именем экзешника query - длинная строка после знака "?"
на extra path работает image map - им передается имя описателя картинки query передается заполненным ISINDEX
Параметры передаются в переменных окружения.
REMOTE_ADDR=127.0.0.1 REMOTE_HOST=localhost HTTP_REFERER=http://www.ac.msk.su:80/cgi-bin/html-KOI?KSP/bachurin.txt REQUEST_METHOD=GET QUERY_STRING=query PATH_INFO=/marshrut PATH_TRANSLATED=/home/httpd/docs/marshrut SCRIPT_NAME=/cgi-bin/proba HTTP_USER_AGENT=NCSA Mosaic for the X Window System/2.4 libwww/2.12 modifiedА теперь вот как оформляются формы с checkbox'ами:
Пример
Источник
<FORM ACTION="http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi" METHOD="POST">
<INPUT TYPE="checkbox" NAME="button" VALUE="on">Press me.<p>
<INPUT TYPE="submit" VALUE="Submit"><p>
</FORM>
# ISINDEX - параметр запроса передается программе CGI в $1 # В форме METHOD=GET - там вызывается команда которой передается # аргумент в переменной окружения QUERY_STRING # http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi?button1=on&button2=off # А вот как работает POST, и PUT. Дополнительная информация проталкивается клиентом на сервер. Сервер подает ее cgi-программе на стандартный ввод. длина посылаемого файла устанавливается в переменной окружения CONTENT_LENGTH а тип данных - в CONTENT_TYPE FORM ACTION="http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi" METHOD="POST"
Пример
Источник
<FORM ACTION="/cgi-bin/proba" METHOD="GET"> <INPUT TYPE=hidden NAME="pg" size=0 VALUE="hidden from user information"> ^^^^^ поле полезно чтоб хранить информацию о "сеансе" <INPUT TYPE=checkbox NAME="button" VALUE="on">Press me.<p> <INPUT TYPE=submit VALUE="Submit"> <INPUT TYPE=reset VALUE="Clear form"> <INPUT TYPE=text NAME=d0 VALUE="" SIZE=12 MAXLENGTH=32> <INPUT TYPE=password NAME=passwd> <TEXTAREA NAME="comments" ROWS=2 COLS=60>Текст внутри формы</TEXTAREA> <SELECT NAME=what MULTIPLE> <OPTION VALUE=web SELECTED>the Web <OPTION VALUE=news >Usenet </SELECT> </FORM>
Content-type: text/html
Содержимое, которое кидается сквозь нашего сервера - клиенту
Если я генерю не содержимое, а только ссылку, то:
Location: /path/doc.txt
или
Location: gopher://gopher.ncsa.uiuc.edu/
Генерим текст в чистом серверном виде - он поедет клиенту сразу, без дополнительной фильтрации:
--- start of output --- HTTP/1.0 200 OK Date: Tuesday, 26-Dec-95 15:17:10 GMT Server: NCSA/1.3 MIME-version: 1.0 Content-type: text/html Last-modified: Tuesday, 24-Dec-95 15:15:41 GMT Content-length: 3132 This is a plaintext document generated on the fly just for you. --- end of output ---Подставляйте туда соответствующие значения переменных $SERVER_PROTOCOL $SERVER_SOFTWARE Автоподстановка URL с timeout'ом. Подставить в начало документа:
<META HTTP-EQUIV="Refresh" CONTENT="12; URL=http://www.ras.ru/~moshkow/">
Дальше идет местный HTML-документ - который через 12 секунд будет автоматически заменен на вышеуказанный URL
Пример
Источник
<form method=POST action="mailto:rauli@megabaud.fi">
I'm entering for the first time from (city, state/country) <INPUT size=60 name="From">
<br><br>
<input type="submit" value="Click here (only the first time, please)"><p>
</form>
Content-type: text/html Set-Cookie: cookiename=valueofcookie; expires=Saturday, 28-Feb-96 23:59:59 GMT; path=/cgi-bin/mycgiprogram
Эта штучка будет автоматом отсылаться в наш сервер клиентом, как только он ее получил
Если сказать так, то клиент останется на старом мест, и не
будет переходить по ссылке
Status: 204 No Content
order allow,deny allow from all deny from polimos.ras.ru