Apache: primera parte

ArticleCategory:

Webdesign

AuthorImage:

[Photo de l'auteur]

TranslationInfo:

Original in fr Charles vidal fr to es Alejandro Ramírez, Walter Echarri

AboutTheAuthor:

Presidente de un club gastronómico en Paris. Ama la filosofía GNU y Open Source, ya que esta dentro del mismo orden de ideas, el de compartir conocimientos. Le gustaría tener tiempo para tocar Saxofón.

Abstract:

Este articulo es la primera parte de una serie de articulos sobre el servidor HTTP ( WEB ) el más utilisado en el mundo: Apache. En esta primera parte, vamos a ver la historia del WEB, el protocolo HTTP, así como las funciones básicas de Apache.

ArticleIllustration:

[Illustration]

ArticleBody:

Historia

Un grupo del CERN (Centro Europeo de Investigación Nuclear) desarrolló el concepto servidor/cliente HTTP.
Una vez terminado su trabajo de investigación, confiaron esto a una universidad americana (NSCA).
Mucha gente estará sorprendida de saber que son los europeos (en particular los franceses) quienes han inventado las bases del WEB moderno.

Apache es el nombre de un proyecto de servidor WEB libre. El nombre apache tiene un origen un poco discutido, algunos disen que viene de "a patchy server" debido a numerosos patchs del principio (otro truco de Hacker :), otros dicen de una manera más seria que los instigadores de este proyecto tomaron el nombre en memoria de los Apaches por su gran adaptabilidad al terreno.
Este servidor es el más utilizado en internet. Respeta el protocolo HTTP (1.1) normalizado por el W3C (WWW Consortium).
Según los estudios de netcraft de Junio de 1999, apache es utilizado en en 56.19 % de los servidores.
Un servidor WEB es el programa "server" que responde a las peticiones de los clientes web, como por ejemplo un browser WEB, lynx :).

El protocolo HTTP.

El servidor y el cliente web se comunican gracias al protocolo HTTP (Hypertext Transfer Protocol ) Nosotros estamos en la version 1.1 de este protocolo, hablamos entonces de HTTP 1.1
Este protocolo puede dividirse en dos grandes partes : La petición, y la respuesta del servidor.
  1. La petición :

  2. Básicamente, se compone de una línea con la solicitud del cliente, que puede ser dividida en tres partes.
    1. [Tipo de petición]
    2. [URL]
    3. [Protocolo utilizado]
    Esta linea puede o debe ser seguida de otras lineas que permiten refinar la petición, como lo veremos para una petición HTTP/1.1
  3. La respuesta :

  4. La respuesta del servidor se compone de un encabezado y del cuerpo de la respuesta ( que varía según el tipo de petición, claro esta ).
    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>

    Analizemos el resultado :
    Primero que nada, la primera linea indica el protocolo utilizado para la respuesta, después el código retornado por el servidor (los códigos superiores a 400 indican un error). Después la fecha, el tipo de servidor, la fecha de la última modificación (esto permite al cliente web saber si lo que hay en su cache es valido o no). Content-Length indica el tamaño del documento enviado (No hay Content-Length para los scripts CGI), el Content-Type da a su cliente WEB el type MIME de lo que es enviado (texto, html, imágenes ...)

    No he descrito todo ya que ciertas cosas me son desconocidas. :)
    Veamos ahora el caso de un error...
    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

    Como ustedes lo pueden ver, el encabezado de la respuesta habla de si misma.
    El protocolo HTTP es muy simple, como veremos en pequeños ejemplos :
    telnet www.linuxfocus.org 80
    Trying 195.53.25.18...
    Connected to nova.linuxfocus.org.
    Escape character is '^]'.
    GET / < return >
          < return >
    
    
    
    [el contenido de index.html del sitio linux focus llega entonces ]..
    Que es lo que pasa del lado del servidor apache?

    Con el comando telnet nos hemos conectado con la máquina www.linuxfocus.org (dirección IP 195.53.25.1) a través del puerto 80, el habitual para este protocolo. El servidor del otro lado está en espera de una petición. Usted escribió GET / y dos veces retorno de carro (enter).
    Porqué los dos retornos de carro ?, bueno esto indica el final de su petición (usted envió una linea vacia). El servidor entonces le responde enviandole el documento solicitado ( index.html ).

    Al final de la transferencia, la se cierra la conexión. Como usted puede constatar, el lenguaje entre el browser web y el servidor es muy simple. Pero atención, esto se complica con las versiones de HTTP :

    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"> ....
    y finalmente si hacemos :
    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
    GET / HTTP/1.1 <return >
                    < return >
    12e
    <!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>
    Efectivamente con el nuevo protocolo HTTP/1.1 la petición necesita más información. La petición debe comprender varias lineas. Este añadido permite transmitir al servidor más información para mejores intercambios.

    Este protocolo esta en la versión 1.1, y la gente de apache ha respetado al pie de la letra las especificaciones. El nuevo protocolo ofrece un gran número de nuevas funciones como autentificación del sitio virtual (varios sitios pueden tener una sola dirección IP. Ver nslookup). Ejemplo :

    GET / HTTP/1.0< return >
    Host:www.linuxfocus.org< return >
                  < return >
    [...]
    Como la mayor parte de programas clientes servidores, el servidor cuando recibe una petición,

    Funcionalidad

    El servidor web es la interface entre el cliente web que pide una URL (Uniform Request Locator) y el sistema donde se encuentra ese servicio. El término URL no es el único, existen también URI, URN pero no los trataremos.

    Efectivamente, el cliente WEB le envía su petición, y el servidor le regresa las páginas html correspondientes a la URL solicitada. El cliente solicitará las imágenes que se encuentran dentro de ellas y el servidor las enviará igualmente. Pero él puede, siguiendo la petición, hacer la interface con algunos programas del sistema, elejidos o escritos por el administrador del sitio (llamado WebMaster); estos programas son llamados scripts CGI ( Common gateway interface ) y regresan una página html. Veremos en la siguiente, que podemos añadir nuevas funciones al servidor WEB mediante la técnica de módulos. Ok! las funcionalidades de base del servidor HTTPD han sido presentadas.

    Conclusión

    Pruebe para comprender bien, lo que apache hace, las diferentes pruebas con telnet.

    Veremos en los próximos articulos la configuración, los módulos de apache (con los hosts virtuales, ciertos módulos que permiten más dinamismo en sus páginas HTML ( php, perl etc ... ), el módulo SSL ( Secure Socket Layer ), y por terminar la compilación de Apache.