Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
эта страница доступна на следующих языках: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

[Фото автора]
Автор Charles vidal

Об авторе:

Владелец гастрономического склада в Париже. Приверженец философии GNU и Open Source за возможность обмена знаниями. Хотел бы выделять время для игры на саксофоне.

Содержание:

Веб сервер Apache (часть 1)

[Иллюстрация]

Резюме:

Эта заметка о самом популярном веб сервере Apache состоит из двух частей : в первой я кратко опишу историю WWW, во второй - введение в HTTP протокол.



 

История WWW

Концепция клиента и сервера HTTP была разработана в CERN (Европейский центр ядерных исследований).
После окончания исследований результаты были переданы в Американский Университет (NSCA).
Предполагаю, что многие будут удивлены, узнав, что основы современного WWW были разработаны европейцами (в частности французами).

Apache - название бесплатного веб сервера. Происхождение названия спорно - одна точка зрения, что это "пятнистый сервер" из-за множества заплаток, так называемых патчей, в начале проекта, другая точка зрения более серьезна - основатели проекта взяли это имя в честь племени апачей, известного своей приспособляемостью.
Это наиболее популярный сервер в Интернет. Он поддерживает протокол HTTP (1.1), стандартизованный W3 консорциумом.
Исследования, проведенные в Июне 1999 г., показали, что доля веб сервера Apache в общем числе работающих веб серверов составляет 60.05%.
В модели клиент-сервер - задача веб сервера ослуживать запросы, поступающие от веб клиентов, например веб браузера Lynx ;-)  

HTTP протокол

Взаимодействие клиента и сервера происходит благодаря использованию протокола HTTP. Текущая версия HTTP протокола - 1.1(RFC 2616).
У протокола две составляющие - запрос клиента и ответ сервера.
  1. Запрос

  2. Запрос состоит из трех частей :

    1. метод запроса
    2. URL (универсальный идентификатор ресурсов)
    3. используемый протокол
    Основные параметры запроса могут сопровождаться дополнительными, как мы увидим в запросе HTTP версии 1.1.
  3. Ответ

  4. Ответ от сервера состоит из заголовка и тела сообщения в зависимости от используемого метода запроса.
            >telnet www.linuxfocus.org 80
            Trying 195.53.25.18...
            Connected to nova.linuxfocus.org.
            Escape character is '^]'.
            GET / HTTP/1.0 <return>
            <return>
            HTTP/1.1 200 OK
            Date: Mon, 27 Sep 1999 21:23:20 GMT
            Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)
            Last-Modified: Sun, 26 Sep 1999 16:40:44 GMT
            ETag: "4b005-1616-37ee4c8c"
            Accept-Ranges: bytes
            Content-Length: 5654
            Connection: close
            Content-Type: text/html
            <PAGE HTML>
            

    Что нам может рассказать этот ответ?
    Первая строка показывает используемый протокол и значение, возвращенное сервером (значение, превышающее число 400 означает ошибку). Далее идет дата, версия сервера, дата последней модификации запрашиваемого HTML документа (это позволяет веб клиенту принимать решения о действительности находящихся в кэше файлов). Параметр Content-length показывает размер ответа, а параметр Content-type - используемый MIME тип ответа (текст, HTML - документ, изображение).

    Это не полное описание : некоторые сообщения все еще являются для меня тайной ;-)
    Посмотрим какое сообщение возвращает сервер при возникновении ошибки :
        >telnet www.linuxfocus.org 80
        Trying 195.53.25.18...
        Connected to nova.linuxfocus.org.
        Escape character is '^]'.
        get / HTTP/1.0 <return>
        <return>
        HTTP/1.1 501 Method Not Implemented
        Date: Mon, 27 Sep 1999 21:22:03 GMT
        Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)
        Allow: GET, HEAD, OPTIONS, TRACE
        Connection: close
        Content-Type: text/html
        

    Ответ довольно подробный ;-)
    HTTP очень простой протокол, что подтверждают следующие примеры.
        >telnet www.linuxfocus.org 80
        Trying 195.53.25.18...
        Connected to nova.linuxfocus.org.
        Escape character is '^]'.
        GET / < return >
              < return >
        
    [далее следует содержание файла index.html сервера www.linuxfocus.org]..

    Как работает веб сервер Apache?
    Вы связываетесь с сервером www.linuxfocus.org (IP - адрес 195.53.25.1) с помощью команды telnet, используя порт номер 80 (HTTP-порт по умолчанию). Далее сервер ожидает запрос и вы набираете команду GET/ и дважды возврат каретки.
    Почему дважды возврат каретки?
    Пустая строка является сигналом для сервера окончания запроса. Сервер отвечает посылкой запрашиваемого файла (index.html). После окончания пересылки файла - TCP/IP соединение закрывается.

    Как видно язык общения между клиентом и сервером достаточно прост, но при использовании версии 1.1 вместо 1.0 для вашего запроса могут возникнуть сложности.

    GET / HTTP/1.0< return >
    < return >
    HTTP/1.1 200 OK
    Date: Tue, 24 Aug 1999 22:25:11 GMT
    Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)
    Last-Modified: Sun, 01 Aug 1999 11:50:52 GMT
    ETag: "4b005-1462-37a4349c"
    Accept-Ranges: bytes
    Content-Length: 5218
    Connection: close
    Content-Type: text/html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ....
    
    Использование версии 1.1 даст следующий результат :
    GET / HTTP/1.1 <return >
    < return >
    HTTP/1.1 400 Bad Request
    Date: Tue, 24 Aug 1999 22:24:59 GMT
    Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/html
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <HTML><HEAD>
    <TITLE>400 Bad Request</TITLE>
    </HEADBODY>
    <H1>Bad Request</H1>
    Your browser sent a request that
    this server could not understand.<P>
    client sent HTTP/1.1 request without hostname (see RFC2068 section 9, and 14.23): </P>
    </BODY></HTML>
    
    Запрос с использованием протокола HTTP версии 1.1 требует больше информации. Он состоит из нескольких строк. Дополнительные строки позволяют передать более детальную информацию, которая улучшает качество соединения.
    Это версия 1.1 протокола HTTP. Команда разработчиков веб сервера Apache строго следует новым спецификациям, которые обеспечивают большую функциональность : аутентификация, виртуальные хосты - несколько сайтов, использующих один и тот же IP - адрес, и т.д.

    Пример :

    GET / HTTP/1.0< return >
    Host:www.linuxfocus.org< return >
    < return >
    [...]
    
    Следующее происходит в большинстве взаимодействий модели клиент - сервер при получении сервером запроса :  

    Функциональность

    Общий принцип состоит в том, что веб сервер может послать один ответ обратно клиенту. Клиент посылает запрос и получает обратно ответ.

    Веб сервер является интерфейсом между веб клиентом, запрашивающим URL - вы можете встретить другую аббревиатуру (например URI, URN), в общем это одно и то же - и ОС, на которой установлен Apache. Веб клиент посылает запрос и получает обратно ответ, соответствующий запрошенному URL.

    Некоторые запросы не могут быть непосредственно обработаны сервером. Серверу необходимо запустить некоторые программы, которые обработают запрос и вернут результат клиенту : так работают CGI (Common Gateway Interface) - скрипты.

     

    Заключение

    Для понимания работы веб сервера Apache можно использовать команду telnet для связи с различными HTTP серверами. Из их ответов вы можете узнать какой сервер на каком сайте установлен.
    Webpages maintained by the LinuxFocus Editor team
    © Charles vidal
    LinuxFocus.org 2000

    Click here to report a fault or send a comment to Linuxfocus
    Translation information:
    fr -> -- Charles vidal
    fr -> en Frédéric Raynal
    fr -> en Alexandre Abbes
    en -> ru Kirill Poukhliakov

    2000-07-05, generated by lfparser version 1.5