Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Instituto Tecnológico y de Estudios Superiores de Monterrey Campus Estado de México Implementación del Protocolo HTTP Paralelizado en Cliente y Servidor. Tesis que para optar el grado de Maestría en Ciencias Computacionales con Especialidad en Redes Presenta lng. Felipe Luna Del Águila Asesor: Comité: Jurado: Dr. Roberto Gómez Cárdenas Dr. Eduardo García García Dr. Roberto Gómez Cárdenas M.C.C. Ariel Ortiz Ramírez Dr. Eduardo García García Dr. Roberto Gómez Cárdenas M.C.C. Ariel Ortiz Ramírez Atizapán de Zaragoza, Edo. de México, Agosto de 1999. RESUMEN Actualmente, el empleo de las comunicaciones en Internet y el alto porcentaje de uso del Web a nivel mundial, requiere de tiempos de respuesta cortos para la visualización de la información solicitada por un usuario. Es importante reducir estos tiempos para que los usuarios logren procesar la información de manera igualmente rápida y hacer más productivas sus tareas. Con esta base, el presente trabajo muestra como se puede lograr reducir dicho tiempo de respuesta mediante ciertas modificaciones en la operación del protocolo HTTP. Entre las principales características del Web esta el hecho de que se requieren de dos entes para el ambiente del Web: servidores web y browsers o "navegadores" como clientes. Los documentos se estructuran en forma lógica o "mark-up" cumpliendo la especificación del HyperText Mark-up Language o HTML. Para la transferencia de información en el Web se emplea al protocolo HTTP (HyperText Transport Protocol). El protocolo de red HTTP proporcionó hasta ahora un buen desempeño a los servidores al permitir la transferencia de texto, hipertexto, imágenes y otros objetos de formatos diferentes a los documentos HTML. HTTP es un protocolo que funciona bajo el paradigma cliente-servidor y sin estado, esto es, un cliente realiza una petición de información a un servidor y espera la respuesta de tal servidor, siendo sin estado, porque no almacena información respecto a las operaciones que se han realizado con anterioridad, ya que su funcionamiento se basa en la duración de una única conexión que sólo existe durante toda la operación. Este diseño con conexión única se desea cambiar en la actualidad. Además, aún con todas las ventajas que presenta el uso del protocolo, su diseño original no tiene considerado el desempeño en los servidores, existiendo diferentes ejemplos que muestran como el protocolo tiene un desempeño bajo o nulo [3]. 1 Debido a las necesidades actuales y para mejorar el uso de anchos de banda estrechos con grandes tiempos de latencia, se requiere de un protocolo que permita llevar operaciones sin orden, control de prioridades sobre las operaciones, transmisión de datos por lotes y un manejo de bits eficientemente, por mencionar algunos. Además, se deben considerar temas como la seguridad, autenticación y autorización para permitir llevar a cabo en el Internet transacciones de tipo comercial. Con esta base, el presente trabajo propone ciertas mejoras al protocolo HTTP actual: reducir el tiempo percibido por el usuario para la visualización de los documentos solicitados a un servidor específico y mejorar el rendimiento de los servidores. 2 CONTENIDO IMPLEMENTACIÓN DEL PROTOCOLO HTTP PARALELIZADO EN CLIENTE Y SERVIDOR . ................................................................................................................................ 0 RESUMEN ....................................... ...................................................... .......... .......................... 1 CONTENIDO ................................................ ............................................................................ 3 LISTA DE FIGURAS ................................................................................................................ 5 INTRODUCCIÓN ................................................................................. .................................... 6 CAPÍTULO l. DETALLES Y FUNCIONAMIENTO DEL PROTOCOLO HTTP ............. 10 1.1 Funcionamiento ... ..... .. ... ...... ... ... ... .... ..... .... ... .... .... ..... ...... .. ..... .. ....... ..... .... ... .... .... ... .. l O 1.2 Parámetros del Protocolo ...... ..... .......... ..... .... .. .. .... ... .... .. .... ... .... .... ... ..... .. ........ ..... ..... 13 1 .3 Mensajes HTTP . ... .... ..... ... .. ... .... ..... ...... .... .... .... .......... ... .. ..... ....... .. .. ..... ... ....... .... ..... . 15 1. 4 Autenticación . ...... .... ..... ... .... .. .. .... ..... ... .... ... ..... .......... .. .. ... .. ..... ... .... ... ..... ... .. ..... ...... . 26 CAPÍTULO 2. PROPUESTAS EXISTENTES DE MODIFICACIÓN AL PROTOCOLO HTTP ........................................................................................................................................ 28 2. 1 Mecanismo para Añadir Extensiones .. .. ... .... ... .. ...... .... ... .. ... ...... ... ................... ..... ..... 28 2.2 Descripción de Tamaños de Documentos por Rangos .... .. ....... ............... .. ... ......... .... . 29 2.3 Extensiones de Sesión .... ..... .. ..... .. .... ... .. ......... ..... .... .. ... .... ..... .... ... .... ........ .... .. .. ... ..... . 30 2. 4 Mecanismo para la Información de Estado .... ...... .. ... .. .... ... ... ... ..... .... .... .... .. .. ... ..... .... . 31 2.5 Mejoras en la Latencia del HTTP ... .. ..... .... .... .... ... .... .. ....... ... ... ... .... .......... ... .. ... ... ... ... 32 2.6 HTTP-NG (HTTP-Next Generation) ..... ... .. .......... .. .. .. .. .... ...... ...... ..... ... .. ... .. .... .... ...... 35 2. 7 SHTTP (Secure HTTP) ....... .... ..... .. ... .. .. ... ..... .... ... .... .. .. ...... ... ....... ..... ........ .. .... .. ...... .. 36 3 2.8 HTTP Versión 1.1 .... .... ..... ... .... ........ ............................................ ......... .... .... .... ..... .. 38 CAPÍTULO 3. ARQUITECTURAS PARALELAS Y SISTEMAS DISTRIBUIDOS ......... .43 3.1 Las Maquinas Paralelas ... ............. ...................... ... .. .... .. ........ ........ .... ......... .......... .. ... 43 3.2 Modelos ....... .. .... ........................ .. .... .. .......... ..... ......... ..... ... ....... ... .. ... .. .. .... .... .. ... ... .. .. 44 3.3 El Equipo Paralelo SPx de IBM como Ejemplo ...... .. ....... .. ....... .... ... .. .. .. ........... .... .... 47 3. 4 Sistemas Distribuidos ... .. ... .... ........ ..... .. ... ...... .. ....... ... .... .. ......... ... ............................. 48 3. 5 Principales Características de los Sistemas Distribuidos ................ .. .. ............ ...... ...... 49 3.6 Aplicación del Trabajo en un Ambiente Paralelo y Distribuido ..... ... ............. ... ....... .. 55 3. 7 Herramientas de Programación de Sistemas Distribuidos y Paralelos ........... ...... ....... 56 CAPÍTULO 4. PROPUESTA PARA LA MEJORA EN RENDIMIENTO DEL PROTOCOLO HTTP .............................................................................................................. 59 4.1 Desarrollo de la Propuesta ..... .... .... ..... ... ........ .... .... ............ ....... ..... .. ......... ... ..... .... .... 64 CAPÍTULO 5. RESULTADOS OBTENIDOS, CONCLUSIONES Y TRABAJO FUTURO . ...............................................•...............................•.........•................................................•......• 77 5.1 Metodología de Prueba .. .... .... ........ ........ .... ... .. .. ........ ......... ........... .... ......... ....... ... ..... 77 5.2 Análisis de los Resultados ........ ... ....... ... .. ... ..... ... ............... ............ .... ... .. ................... 80 5.3 Trabajo Futuro ...... ........ .. .... .. .............. .. ..... ... ............. .... .............. ... .. .. .... .......... ..... ... 81 REFERENCIAS Y BIBLIOGRAFÍA .....................................................................................82 ANEXO A. JERARQUÍA DE LAS CLASES EN JAVA QUE CONFORMAN TODO EL CÓDIGO DEL CLIENTE Y DEL SERVIDOR DE HTTPF ................................................. 85 GLOSARIO ............................................................................................................................. 87 4 LISTA DE FIGURAS Figura 1.1.- Funcionamiento básico del protocolo HTTP ........... ... ..... .. .. ........... ....... ..... .. ..... .. .. .. 11 Figura 1.2.- Funcionamiento del protocolo HTTP con la existencia de servidores Proxy ........... . 12 Figura 4.1 .- Esquema general del trabajo propuesto .................................................................. 60 Figura 4.2 .- Detalle de la integración de los diferente SCPs de acuerdo a los protocolos por emplearse ....... ..... ........ ................. ...... ....... ........ .. ........ ........................................... ..... ........ 62 Figura 4.3.- Relación de los clientes HTTPfy el servidor distribuido y paralelo .... ......... ........... . 67 Figura 4.4.- Esquema del proceso que se realiza entre un cliente y el servidor (desarrollo inicial). ·········· ····· ······· ·············· ·· ······················ ···· ········ ····· ········· ·· ············ ··························· ·· ··········· 71 Figura 4.5.- Esquema del proceso que se realiza entre un cliente y el servidor (versión final) ... .. 75 Figura 5.1 .- Tiempo en segundos para obtener la página gillian_big.html y su comportamiento en el tiempo ........ ...... ........ ... ........... ... ......... .... ...... ... .... ......... ..... ........ ..... ........ ...... ....... ... ......... 78 Figura 5.2 .- Tiempo en segundos para obtener la página gillian.html y su comportamiento en el tiempo . ............. ........... ... ........ ....... ......... .... ......... ..... .......... ... ................... ....... ......... ... ....... . 79 Figura 5.3 .- Tiempo en segundos para obtener la página sun.html y su comportamiento en el tiempo . ... ....... ... ........... ... ......... .... ........... .... ....................... ... ... ................. ... .. ........ ... .......... . 79 Figura 5.4 .- Tiempo en segundos para obtener la página starwars.html y su comportamiento en el tiempo ......... ... .. .......... .... ....... ....... .......... ............. ....................................... ..... .......... ... ....... 80 5 INTRODUCCIÓN El World-Wide-Web (WWW), también conocido como W3, se m1c10 como un proyecto para tener un lugar común en el que diferentes investigadores del CERN (Laboratorio de Partículas Físicas Europeo, ubicado en Suiza) pudieran compartir sus ideas y conocimientos con respecto a proyectos de investigación de fisica en alta energía [ 1]. En el W3 no existe una centralización de la información, y si dos proyectos tienen una relación, uno de ellos reflejará a la otra parte (mediante un enlace, que se denomina HiperTexto), dando la facilidad de que si existe una modificación en un proyecto dicho cambio no alterará al otro. Debido a esta ventaja, el proyecto ganó gran aceptación logrando su expansión hasta el Internet. Para poder acceder a la información dentro del W3, se requiere un programa cliente que se ejecuta en la computadora del usuario. Al obtener una página del W3, además de obtener texto, quizás se obtengan también imágenes, menús e hipertexto. Al hacer un clic con el 'ratón' en un hipertexto (también llamado "anchor"), visualizado como un área sobresaltada, se obtiene la información relacionada contenida en el mismo servidor o en otro servidor remoto. Las principales características del W3 son: • La interfaz del usuario, o formato de presentación del programa cliente, es la misma para todos sin importar que servidor esté proporcionando la información, y siempre incluye la presentación de hipertexto. • Las ligas pueden apuntar a cualquier información disponible u objeto que se pueda visualizar. • Existen menús y directorios, que pueden ser también reemplazados por hipertextos que al seleccionarlos realicen las mismas acciones. • Hay la posibilidad de introducir nuevos formatos para multimedia y de esta forma crecer la especificación. • Los programas clientes del W3 pueden presentar la información transmitida ( el hipertexto se transmite en forma lógica o "mark-up") de la manera que mejor se desee de acuerdo a la plataforma en donde se este ejecutando el programa cliente. • La información se une por medio de referencias a otra información. 6 • El sistema de direcciones que se utiliza es el URI ( Universal Resource ldent~fier) que inician con el nombre del protocolo ("http" para las direcciones dentro del W3) seguido de la dirección Internet y nombre del recurso a obtener. • El protocolo de red HTTP (HyperText Transport Protocof) proporciona un buen desempeño a los servidores al permitir la transferencia de texto, hipertexto, imágenes y otros objetos de formatos diferentes a los documentos HTML. • El lenguaje HTML (HyperText Mark-up Language) se utiliza para transmitir textos, menús y otra información a través del W3, aunque puede usarse fuera del protocolo HTTP como lo podría ser en el correo electrónico de hipertexto. Existen actualmente otros dos sistemas que comparten la misma arquitectura cliente-servidor y cierta funcionalidad del W3 . Estos sistemas son WAIS (Wide Area lnformation Servers), de la compañía W AIS, Inc. y Gopher, de la Universidad de Minnesota. W AIS es básicamente un sistema de búsqueda por únicamente texto. Gopher por su parte, presenta menús, texto y gráficas, siendo sus búsquedas por medio de menús. Ambos sistemas pueden producir resultados de búsquedas que incluyen gráficas, sonido y vídeo. Otra ventaja de un programa cliente W3 es que puede tener acceso a cualquier servidor W AIS, Gopher o W3. Dentro de las expectativas y desarrollos a futuro en el W3 se encuentran la implementación de un servicio de nombres mundial, en el que los documentos se obtendrán por medio del nombre y no por su ubicación; la creación de editores de hipertexto para usuarios no expertos; la integración de editores concurrentes, teleconferencias y realidad virtual; la creación de servidores para equipos no tan poderosos orientados a grupos pequeños y la implantación de servicios de lucro o comerciales dentro del Internet. El protocolo HTTP fue creado en 1990 por Tim Bemers-Lee, Roy Fielding y Henrik Nielsen, para la transferencia de cualquier objeto con información y no sólo texto, hipertexto e imágenes. Para poder lograr este objetivo, el cliente envía una lista de los posibles formatos que puede manejar, esperando del servidor la información respectiva en cualquiera de los formatos mencionados. Esto permite el crecimiento de las especificaciones iniciales del protocolo al permitir la definición de nuevos formatos. HTTP es un protocolo de petición-respuesta y sin estado. Lo primero se refiere al hecho de que un cliente realiza una petición de información a un servidor y espera la respuesta de tal servidor. La segunda implica que no almacena información respecto a las operaciones que se han realizado con anterioridad, ya que su funcionamiento se basa en la duración de una única conexión que sólo existe durante una operación. Este diseño sin conexión se desea cambiar en la actualidad como se explica en el capítulo 2. 7 El funcionamiento del protocolo inicia con la petición del cliente, la cual incluye un comando de operación ( conocido como el método) y el URI del objeto. Los URls son identificadores que hacen referencia a cierto objeto mediante diferentes sintaxis dependiendo del protocolo a emplear. Para el protocolo http se forman por: el espacio de direcciones ("http"), el nombre del servidor que contiene al objeto (ejemplo: www.cem.itesm.mx), el camino de búsqueda estructurado como subdirectorios dentro del sistema de archivos del servidor y el nombre del objeto (un ejemplo completo de URl puedeser: "http://www.cem.itesm.mx/maestrias/al245827/miobjeto.x"). Los métodos de operación comunes son "GET", "HEAD" y "POST". El método GET se emplea por todos los clientes para obtener el objeto pedido. HEAD se define para la actualización del "browser" al verificar la existencia y validez de algún URI. Y el método POST se utiliza para añadir un nuevo documento al Web, o bien, para introducir una forma de llenado. Para poder transmitir objetos cuyos formatos son binarios o de otro tipo no estándar (pero con la aceptación mutua entre cliente y servidor de emplear dichos formatos), se transfiere junto al objeto, dentro de los encabezados del mensaje, "metainformación" adicional. Aún con todas las maravillas que presenta el uso del protocolo, su diseño original no tiene considerado el desempeño en los servidores. Existen diferentes ejemplos que muestran como el protocolo tiene un desempeño bajo o nulo [3]. Un ejemplo es: Un fabricante emite un comercial por televisión ( que muestra un cierto URL) durante la transmisión de un evento de gran cobertura, como en un Super-Bowl o en un Mundial de Fut-Bol. Éste comercial puede captar la atención de miles de personas que tratarán de obtener, durante la siguiente interrupción al evento, el recurso mostrado en el URL. Éste caso puede generar miles de peticiones durante un breve instante que degradan al servidor. Debido a todas las necesidades actuales, y orientado en el mejor uso de anchos de banda estrechos con gran tiempo de latencia, se requiere por lo tanto de un protocolo que permita llevar operaciones sin orden, control de prioridades sobre las operaciones, transmisión de datos por lotes y un manejo de bits eficientemente. Además, se deben de considerar temas como la seguridad, autenticación y autorización para permitir llevar a cabo en el Internet transacciones comerciales. Este trabajo se enfocará en la creación de una implementación que mejore el rendimiento del protocolo HTTP en el tiempo de latencia dentro de las comunicaciones. Para lograr este objetivo, se propone la creación de dos sistemas principales: un servidor y un cliente o browser, que servirán para probar ésta tesis. 8 Con el objetivo ya mencionado, los siguientes puntos serán considerados para la creación de los sistemas del presente trabajo: • Soportar la versión existente del HTTP 1. O (y quizás futuras versiones de acuerdo a los documentos actuales propuestos para modificar al protocolo). • Paralelizar el procesamiento del servidor diseñándolo para su ejecución en una máquina de múltiples procesadores. El servidor será paralelo, esto es, sus partes o módulos de funcionamiento internos trabajarán en paralelo cuando se pueda ( distribuyendo cargas en procesadores y - cuando se trate de un mismo procesador - en hilos). Para el caso del cliente únicamente se realizará su diseño para el empleo de múltiples hilos o multithreading. • Empleo de varias conexiones (paralelizar las comunicaciones). Se analizará la posibilidad de modificar al protocolo HTTP para que maneje diferentes conexiones TCP (una conexión para la comunicación de diferentes tipos de datos: imágenes, texto, etc.); O bien, emplear UDP en lugar de TCP, con sus respectivas consideraciones. • Modificar el formato de los documentos en formato HTML, para proporcionar información al servidor de la cantidad de imágenes contenidas en un documento, para que de esta forma un servidor envíe todo el documento completo sin esperar a que se le pidan las partes que lo componen. Por otra parte, se sugieren trabajos futuros que contemplen: • Transferir las imágenes grandes por medio de otro protocolo que sea orientado a la transmisión binaria ( como pudiera ser el z-modem quizás modificado). • Considerar la introducción del concepto de cliente Kerberizado, para emplear los sistemas en ambientes que requieran seguridad en las comunicaciones. • Traducir todos los valores que emplea el protocolo de HTTP a códigos numéricos, para reducir el número de caracteres a enviar en cada mensaje. • Introducir un mecanismo de transacciones que permita conocer si una cierta operación fue completada o no cuando haya sido abortada. 9 CAPÍTULO 1 DETALLES Y FUNCIONAMIENTO DEL PROTOCOLO HTTP. Con el propósito de comprender la especificación de HTTP operante actualmente en Internet, se presenta a continuación una descripción del modo de operar, las partes que componen al protocolo y los conceptos básicos de seguridad que el protocolo permite emplear. 1.1 FUNCIONAMIENTO. La versión 1.0 del protocolo de HTTP [2], que es la versión actualmente empleada, funciona principalmente en dos escenarios : en el primero, el cliente se conecta directamente al servidor, y en el segundo, existen uno o varios intermediarios entre el cliente y el servidor. En el escenario básico visto sin errores, la operación del HTTP se comporta de la siguiente manera: un cliente contacta a un servidor de HTTP y establece una conexión con él, enviándole una petición en la cual solicita un determinado tipo de información. El servidor recibe la petición y responde transfiriéndole al cliente la información deseada. Por último, el servidor cierra la conexión que se había establecido. La figura 1.1 muestra éste proceso. 10 (D Establecimiento de oonexión 4 ® Cliente envía petición @ Servidor responde a la petición ~ • . @ Cierre de la oonexión Figura l. l.- Funcionamiento básico del protocolo HTTP. El establecimiento de la conexión entre el cliente y el servidor emplea el protocolo de transporte TCP. La petición del cliente al servidor lleva los siguientes datos: Método de petición, URI deseado, versión del protocolo HTTP a emplear, y un mensaje tipo MIME, que contiene información del cliente y un posible cuerpo de contenido, con modificadores de petición. La respuesta del servidor al cliente consiste de una línea de estado y de un mensaje tipo MIME. La línea de estado tiene información respecto a la versión del protocolo y un código de error o de éxito. Por su parte, el mensaje tipo MIME contiene información respecto al servidor, metainformación de la entidad y el cuerpo de contenido (datos a transferir) . En el segundo escenario, la forma de operar es afectada únicamente por la existencia de servidores intermediarios llamados Proxies. Estos Proxies no son mas que proveedores de un servicio de cache de recursos web, cuyo objetivo es reducir el tiempo que se toma para entregar la respuesta al cliente, para que de alguna forma se incremente el performance del protocolo de HTTP. Su funcionamiento se muestra en la figura 1.2. 11 Proxy Proxy Proxy Servidor final Figura I .2.- Funcionamiento del protocolo HTTP con la existencia de servidores Proxy. Los pasos que se siguen son: 1) El cliente envía una petición a un servidor final. Dicha petición pasará forzosamente por al menos un servidor Proxy. 2) El primer servidor Proxy que recibe la solicitud del cliente, analiza la petición y determina si tiene una copia fresca o reciente del recurso solicitado. En caso de tener una copia reciente del recurso, se la envía al cliente como respuesta; de esta fonna, la solicitud fue atendida sin tener que viajar por todo el Internet. Sin embargo, si el servidor Proxy no tiene el recurso, o lo tiene pero es "viejo", entonces el servidor Proxy actuará ahora como cliente y hará la petición correspondiente al servidor final ( a este servidor final se le conoce origin server dentro de las referencias en idioma inglés). Es importante mencionar, que si existen varios Proxies entre el cliente y el servidor final, cada Proxy trabajará como servidor (hacia el cliente) y como cliente (hacia otro servidor). 3) Una vez que el servidor Proxy obtiene la respuesta del servidor final, guarda una copia del recurso para entregarla en futuras solicitudes. 4) Finalmente le responde al cliente como lo hubiera hecho el mismo servidor final. Aparte de los dos escenarios descritos anteriormente,el protocolo de HTTP también define instrucciones para emplear diferentes conjuntos de caracteres (internacionalización}, mecanismos de codificación de las respuestas, envió y recepción desde y hacia el servidor de diferentes tipos de recursos (la mayoría corresponden a algún tipo de los registrados por la IANA - Internet 12 Assigned Numbers Authority), redirección para la búsqueda de algún recurso ubicado en otro servidor, autenticación simple, y comandos que se pueden aplicar a los entes intermediarios. 1.2 PARÁMETROS DEL PROTOCOLO. Para que el protocolo pueda desempeñar su labor, requiere de varios parámetros que le definen la forma de operar e interactuar con los diferentes entes que pueden existir en éste ambiente. Estos entes podrían ser: los diferentes navegadores que actúan como clientes, y los diferentes tipos de servidores, que se pueden subdividir en los de entrega de documentos o fuentes y los de cache. A continuación se presentan los parámetros globales establecidos en el estándar para el protocolo deHTTP: a) Versión HTTP: versión del protocolo implementado a ser empleado. El propósito de especificar la versión del protocolo es determinar la capacidad de las entidades a comunicarse. Esta versión se especifica con la línea: "HTTP/1.0" Para proveer compatibilidad con las versiones anteriores de HTTP, los servidores y clientes que se implementen bajo la versión 1. O deberán reconocer y manejar la versión O. 9 cuando ésta se emplee. En el caso de los servidores Proxy, si éste recibe una versión inferior a la que tiene su implementación, podrá utilizar la versión mayor con el siguiente servidor y responder al cliente con la versión apropiada. Cuando reciba una petición con una versión mayor, el proxy deberá responder con un error o bien con la versión inferior. b) Identificador Uniforme de Recursos (Uniform Resource ldentijier): Identifica un recurso de red. Pueden ser de acuerdo a la sintaxis general para URis o un URL de HTTP. La sintaxis general para los URis se basa en las definiciones explicadas en los documentos RFC 1630, 1738 y 1808 con ciertos cambios en restricciones y adaptadas para el empleo de los proxies. Las comunicaciones bajo el protocolo HTTP utilizan la sintaxis y semántica del HTTP URL. Esta sintaxis menciona el puerto por el cual el servidor espera por este tipo de comunicaciones, y que al no mencionarse por omisión será el puerto 80. 13 c) Formatos de fecha/tiempo (Dateí/'imeformats): Son las marcas de fecha y tiempo a emplear. Existen tres tipos de formatos para indicar fechas y tiempos: Formato del RFC 822 (actualizado por el RFC 1123): Formato del RFC 850 (modificado por el RFC 1036): Sun, 06 Nov 1994 08:49:37 GMT Sunday, 06-Nov-94 08 :49:37 GMT Formato asctime() del lenguaje ANSI C: Sun Nov 6 08:49:37 1994 Todas las entidades bajo el protocolo HTTP 1.0 deberán reconocer los tres tipos de formatos, más nunca generar el formato del lenguaje ANSI C. d) Conjuntos de caracteres codificados (Coded Character Sets): Es el nombre del conjunto de caracteres codificados que las entidades de HTTP utilizarán. Los conjuntos de caracteres de codificación que se emplean, son los mismos que se definen para los mensajes MIME, los cuales son un método de conversión de una secuencia de octetos a una secuencia de caracteres. La conversión en la dirección opuesta no es requerida. Estos conjuntos se identifican en el protocolo de HTTP como "tokens" . El registro de Conjuntos de Caracteres IANA contiene todos los tokens, aunque para el HTTP no todos son empleados y, algunos otros recomendados para el manejo de mensajes MIME son utilizados. Entre los conjuntos válidos se encuentran los de ISO-8859 y los de US-ASCII. Además, el protocolo permite el empleo de cualquier otro tipo de conjunto definido entre las aplicaciones. e) Mecanismo de codificación (Encoding Mechanism): Indica el tipo de codificación que estará aplicado a un recurso. Los mecanismos de codificación son empleados para describir el tipo de procesamiento que se le dio a la información, como en el caso de una compresión o encriptación. Al especificar el mecanismo se indica más bien el programa que se requerirá para descodificar la información y poderla leer. Existen tres tipos de mecanismos definidos: "x-gzip", "x-compress" y token. Los dos primeros emplean los mecanismos de Lempel-Ziv 77 con un CRC de 32 bits (empleado en el programa "gzip") y Lempel-Ziv-Welch (empleado por el programa "compress"), respectivamente. El mecanismo dado por token permite el uso de cualquier otro mecanismo. 14 f) Tipo de objeto (Media Type): Es el tipo de objeto del Internet que provee tipos de datos y tipos de negociación abiertos y extensibles. Los tipos de objeto a emplearse son los descritos en el RFC 1521 o bajo IANA, aunque no necesariamente restringidos a únicamente tales tipos. Otros tipos de objetos se pueden emplear y se recomienda que sean registrados bajo IANA de acuerdo al RFC 1590. En general, los cuerpos de las entidades se deben representar en una forma canónica apropiada antes de su transmisión. La especificación de HTTP 1. O modifica la forma canónica del tipo texto al permitir a una secuencia de octetos representar un corte de línea de texto (text line break) mediante los caracteres CRLF o bien, con un simple CR o LF. Por otra parte, para el tipo texto se redefine el conjunto de caracteres de codificación empleado por omisión. Se emplea el conjunto "ISO-8859-1" en lugar del valor por omisión de "US- ASCII", ya que el primero es un superconjunto del segundo. Los tipos de partes múltiples que provee MIME no son de importancia para el protocolo HTTP 1. O aunque idealmente deberían de ser manejados por el agente del usuario de una forma similar a la que un agente usuario MIME realiza cuando recibe un tipo de partes múltiples. g) Identificadores del producto (Product Tokens): Identifica una aplicación de otra cuando éstas se comunican. Esta identificación permite el uso opcional de una descripción de versión de la aplicación y el listado de subpartes que emplee la aplicación y sus versiones. 1.3 MENSAJES HTTP. Los mensajes posibles a tener por el protocolo HTTP son únicamente dos: de petición y de respuesta. Para tener compatibilidad con la versión 0.9 se especifican cuatro tipos de mensajes: Simple-Request, Simple-Response, Full-Request y Full-Response, siendo los dos primeros los empleados para la versión O. 9 El mensaje Simple-Request sólo permite el método "GET" y el mensaje de Simple-Response solo tiene el cuerpo de la entidad a ser transferido. En estos mensajes no se transfiere información adicional como lo hacen los mensajes Full. Un servidor de HTTP 1. O que reciba una petición simple deberá responder con una respuesta 15 simple, y solamente en este caso será válido el uso de los mensajes simples. Además, si un cliente realiza una petición Full y recibe un mensaje de respuesta que no contiene una línea de estado (Status-Line), deberá considerar al mensaje como un mensaje de respuesta simple y procesarlo. Por su parte, los mensajes Full se forman de la siguiente manera: Full-Request = Request-Line *(General-Header I Request-Header I Entity-Header) CRLF [Entity-Body] Full-Response = Status-Line *(General-Header I Response-Header I Entity-Header) CRLF [Entity-Body] De aquí se observa que cada mensaje de la versión 1.0 transfiere información adicional por medio de las líneas de petición en la petición o de estado en la respuesta, y por los encabezados. Se pueden tener varios encabezados seguidos uno de otro dados en varias líneas, separados cada uno por al menos un LWS. El orden en que se presenten los encabezados no es de importancia (aunque es preferible el orden: General-Header, Request/Response-Header y Entity-Header). A continuación se describen todas las partes comprendidas en el esquema HTTP versión 1.0: a) Campo de Encabezado para Mensajes en General(General Message Header Field) El encabezado general se aplica en ambos tipos de mensaje: de petición y de respuesta. Sirve para describir atributos generales aplicables únicamente al mensaje a transferir. Esta versión del HTTP tiene especificados tres posibles contenidos para el encabezado general: Date, MIME-Version y Pragma. Cualquier otro encabezado o header general a utilizar deberá ser añadido mediante un cambio a la versión del protocolo. 16 b) Mensaje de Petición (Full-Request) Como ya se mencionó en los tipos de mensajes, un mensaje de petición Full-Request está formado con los siguientes componentes: • Request Line (Línea de petición). Formado a su vez por: Method (Método), Request-URI (URI pedido) y HTTP-Version (Versión del HTTP). • General Header (Encabezado General) y/o Request Headers Fields (Campos de encabezados de petición) y/o Entity-Header (Encabezado de la Entidad). • Entity-Body (Cuerpo de la entidad). Requerido cuando se emplea el método "POST". b.1) Request-Line: Línea de comando de petición. La línea de petición esta formada por el método que se aplicará al recurso URI, seguido por el URI deseado, la versión del HTTP y terminada la línea con un CRLF. A diferencia de la petición simple, esta petición permite otros métodos además del "GET". b.2) Method: Método a ejecutar sobre el recurso dado en el URI pedido. Los métodos especificados pueden ser "GET", "HEAD", "POST" y cualquier otro añadido como extensión al protocolo. Por medio del mensaje de respuesta se puede conocer si un método es válido, y en caso de que no se conozca o no este implementado el método indicado, se le indica al cliente mediante el código de respuesta número 501. El método "GET" indica que se desea obtener la información a la que el URI presentado apunta. Si existe un campo de encabezado If-Modified-Since dentro del mensaje de petición, el método "GET" se convierte en un GET Condicional, cuyo propósito es reducir el uso de la red al permitir a un proceso de cache el refrescar la información sin la necesidad de volverla a transferir. Por su parte, el método "HEAD" es semejante al método "GET" en el que se pide cierta información, con la diferencia de que el cuerpo de la entidad (Entity-Body) no es transferido por el servidor que dará la respuesta, esto es, con este método se obtiene un mensaje de respuesta que no contiene Entity-Body (aun cuando existan encabezados que hagan parecer que sí hay un cuerpo de entidad). Este método es útil para evaluar ligas de hipertexto. El último método descrito en la especificación de la versión 1.0 es el método "POST". "POST" permite enviarle al servidor una entidad (presentada en el campo Entity-Body dentro del mensaje Full-Request) para que éste último la maneje. El manejo de la información por el 17 servidor lo determina el URI indicado: un archivo se puede añadir a un subdirectorio, un mensaje se puede añadir a un grupo de noticias, un bloque de datos puede ser transferido para su proceso, un registro se puede añadir a una base de datos, etc. Este método requiere del campo Content-Length dentro del mensaje de petición. Si este campo no se encuentra en el mensaje, el servidor responderá con el código número 400 (los códigos de respuesta se describen posteriormente). El mensaje de respuesta del servidor permitirá conocer el resultado de la aplicación de un método "POST" por medio de los códigos de respuesta. b.3) Request-URI: Identifica al recurso que se le aplicará la petición. El identificador URI tiene dos opciones: absoluteURI o abs_path. El primero se emplea cuando la petición se realiza a un servidor proxy y el segundo es para cuando la petición es realizada a un servidor de origen. b.4) Request-Header Field: Proporciona información adicional sobre la petición. Los encabezados de petición permiten indicarle al servidor otros datos relativos a la petición y al cliente. Estos datos adicionales comprenden información de Autorización ( Authorization ), Origen (From), Modificación desde cierta fecha (If-Modified-Since), Referencias (Referer) y sobre el Agente del Usuario (User-Agent), siendo estos campos los únicos existentes y permitidos por esta versión del HTTP (la descripción de todos los campos de encabezados se describe más adelante). Cualquier otro campo será definido mediante un cambio de versión al protocolo. e) Mensaje de Respuesta (Full-Response) Cuando el servidor recibe un mensaje de petición Full-Request, contesta la petición con un mensaje de respuesta Full-Response, el cual esta formado por: • Status Line (Línea de estado). Compuesta por: HTTP-Version, Status-Code (Código de estado) y Reason-Phrase (Frase de razón). • General Header (Encabezado General) y/o Response Headers Fields (Campos de encabezados de respuesta) y/o Entity-Header (Encabezado de la Entidad). 18 • Entity-Body (Cuerpo de la entidad). c.1) Status-Line: Línea del estado resultante de la petición realizada. La línea de estado consiste de la versión del protocolo HTTP seguido por un código numérico que junto a la frase de razón permite conocer cual fue el resultado de aplicar el mensaje de petición. c.2) Status Codes and Reason Phrases: Da el código y la razón del mensaje de respuesta. Los códigos de razón son un número entero de 3 dígitos y la frase de razón esta dado por un texto que describe brevemente el resultado. El primer dígito del código determina la clase de la respuesta, y puede ser (para cada clase se describen los códigos y frases de razón especificados por el protocolo): lxx: Informativo. Esta clase esta reservada para uso futuro. 2xx: Éxito. La operación ha sido exitosa. 2000K La petición tuvo éxito y dependiendo del método dado se tiene que el mensaje de respuesta esta compuesto por: Para el método GET, se responde con una entidad correspondiente al recurso pedido. Con el método HEAD se responde con encabezados sin un cuerpo de entidad. Y para el método POST, se envía una entidad que describe el resultado de la acción. 201 Created Se ha creado un nuevo recurso (determinado por el método POST) que puede ser referenciado por el URI, el cual envía el servidor dentro del cuerpo de entidad del mensaje de respuesta. Se puede responder con 202 si la acción del POST no puede ser completada inmediatamente o dentro de cierto tiempo. 202 Accepted La petición fue aceptada pero no se ha podido procesar. El cuerpo de entidad en el 19 mensaje de respuesta debería de mencionar cuando estima el servidor completar la operación. 204 No Content Esta respuesta es principalmente para indicar que se ha completado la petición pero sin información nueva que requiera ser enviada al cliente para su visualización (no existe un cuerpo de entidad en el mensaje de respuesta). Se emplea para la ejecución de "scripts" o casos similares. Jxx: Redirección . Se requiere(n) de otra(s) acción(es) para completar la petición. 300 Mu/tiple Choices Este código indica que se tienen varias opciones de ubicación del recurso solicitado. Se puede regresar dentro del campo Location (de los encabezados de respuesta) la ubicación preferida por el servidor. 301 Moved Permanently El recurso ha sido movido permanentemente a una nueva ubicación. El mensaje de respuesta proporciona, por medio del campo Location, la nueva dirección del recurso; mientras que el cuerpo de la entidad describe mediante una nota lo sucedido incluyendo un hipertexto que apunte a la nueva ubicación. Se recomienda que el cliente re-ligue sus referencias a esta nueva dirección. 302 Moved Temporarily Parecido al código 301, éste resultado indica que el recurso se encuentra en otra localidad. El cliente no requiere cambiar sus referencias originales al recurso. 304 Not Modi.fted Resultado de un GET condicional, éste código no regresa ningún cuerpo de entidad, aunque se deben observar los campos Date, Server y Expires como los más relevantes para los programas que hacen usode cache. 4xx: Error del Cliente. La petición esta mal hecha o no se puede completar. Un cliente inmediatamente deberá dejar de enviar datos cuando reciba este código. 400 Bad Request No se pudo entender la petición. El cliente deberá modificar su petición antes de repetirla. BIBUOTECA 20 401 Unauthorized No se tiene autorización para acceder al recurso solicitado. El servidor envía dentro del campo de encabezado WWW-Authenticate un reto que deberá completar el cliente, y enviar de regreso (por el cliente) su respuesta al reto en el campo de encabezado Authorization dentro de un mensaje siguiente de petición. 403 F'orbidden Se entendió la petición pero el servidor no proporcionará el recurso ni explicará porque no desea hacerlo. 404 Not F'ound El servidor no encontró el recurso pedido, y s1 no desea dar explicaciones puede utilizar el código 403 . Sxx: Error del Servidor. El servidor falló al tratar de completar la petición. Un cliente inmediatamente deberá dejar de enviar datos cuando reciba este código. 500 Interna/ Server Error Existe un error interno en el servidor que impide completar la petición. 501 Not lmplemented Cuando el servidor no reconoce un método indicado en el mensaje de petición, regresa éste código. 502 Bad Gateway El servidor recibió una respuesta no válida del gateway o servidor siguiente de la cadena de servidores que procesan la petición. 503 Service Unavailable No se puede proveer el servicio por causa de una sobrecarga al servidor o por otros motivos temporales. Además de estos códigos, se pueden emplear otros por medio de una extensión a la especificación del protocolo, aunque los mencionados aquí son los únicos que se reconocen en la práctica. 21 c.3) Response Header Field: Proporciona información adicional a la respuesta. Esta información no puede ser transmitida por la línea de estado (Status-Line) y se relaciona con el mensaje de respuesta y el servidor (no se aplica esta información al cuerpo de la entidad). Los campos especificados por el protocolo son: Location (Ubicación), Server y WWW- Authenticate (Autenticación del WWW). Cualquier otro campo será definido mediante un cambio de versión al protocolo. d) Entidad (Entity) Una entidad es enviada dentro de las peticiones o las respuestas cuando el tipo de mensaje lo requiere, y se compone de: • Entity Header Fields (Campos de encabezados de la entidad). • Entity-Body (Cuerpo de la entidad). d.1) Entity Header Fields: Provee metainformación opcional del Cuerpo de la entidad (Entity- Body) en caso de estar presente, o del recurso identificado por la petición. Los campos válidos para los encabezados son: Allow (Permitir), Content-Encoding (Codificación del contenido), Content-Length (Longitud del contenido), Content-Type (Tipo de contenido), E,xpires (Expiración), Last-Modi.fied (Última modificación) y cualquier otro encabezado HTTP adicional añadido como extensión al protocolo sin necesidad de cambiar de versión (aunque no se garantiza que sean reconocidos por los servidores). El campo de la longitud del contenido es requerido forzosamente cuando un mensaje lleva consigo el método "POST". d.2) Entity-Body: Contenido, si existe alguno, de la entidad. El cuerpo de la entidad es un flujo de octetos que representan cierto tipo de información de acuerdo al formato y codificación que tenga aplicada ( determinada por los campos Content- 22 Encoding y Content-Type). Esta secuencia de octetos se puede visualizar como una estructura de dos niveles: Entity-body = Content-Encoding ( Content-Type ( data ) ) Por omisión, no existe una codificación. Y aunque no existe un valor de omisión para el tipo de contenido, cuando este no sea especificado mediante el campo Content-Type, se debe determinar su tipo por medio de la inspección del contenido ( data) o por el nombre de la extensión empleado en el URL; En caso de no poder ser determinado el tipo, se considerará como tipo "application/octet-stream". Por otra parte, dado que el cuerpo de contenido es un flujo de octetos en el que no se sabe hasta donde podría parar, se determina su tamaño por dos formas: se puede hacer uso del campo Content-Length para conocer directamente el tamaño, o bien, cuando el servidor cierre la conexión se sabrá que terminó la transmisión de información. En caso de que sea el cliente el que envía información, éste no podrá cerrar la conexión para que se determine el tamaño del cuerpo y debe enviar indiscutiblemente el tamaño mediante el encabezado provisto para este efecto (encabezado Content-Length). e) Definiciones de los Campos de Encabezados A continuación se describen todos los tipos de encabezados disponibles para la versión 1.0. Allow (Permitir): Lista el conjunto de métodos soportados por el "Request-URI", esto es, permite que un cliente le informe al servidor sobre los métodos que se pueden aplicar al recurso. Sin embargo, este campo no indica que métodos tiene implementados el servidor. El campo Permitir es ignorado cuando se emplea dentro de un mensaje de petición que use el método "POST". Authorization (Autorización): El campo de autorización permite autentificar un usuario con el servidor. Se puede emplear dentro de un mensaje de petición después de haber recibido un mensaje con código de respuesta número 401. El proceso de autenticación se describe posteriormente. Content-Encoding (Codificación del contenido): Este campo indica cual fue el mecanismo empleado para codificar al documento (y por lo tanto, el mecanismo necesario para descifrarlo), tal como se explicó en la sección "Parámetros del Protocolo - E.11coding Mechanisms". Content-Length (Longitud del contenido): Content-Length especifica el tamaño del "Entity- 23 Body" en bytes. Es altamente recomendado el uso de este campo para todos los mensajes. Su uso fue descrito en la sección "Entity - Entity Body" . Content-Type (Tipo de contenido): Determina el tipo de media del "Entity-Body". La sección anterior "Parámetros del protocolo - Media Type" describe mejor el significado de los tipos de media. Date (Fecha): Fecha y hora del mensaje originado (escrito bajo un cierto formato, como se describió en la sección "Parámetros del protocolo - Date/Time formats"). Este campo debe ser siempre especificado por los servidores (para ayudar al manejo de los mensajes que se encuentren en cache); se recomienda que los clientes lo especifiquen cuando empleen el método "POST". Por omisión, se determina como la fecha y hora del momento en que recibe el mensaje uno de los entes en comunicación, siendo necesaria su asignación por omisión cuando el mensaje se vaya a manejar por cache o pasar por un gateway vía otro protocolo que requiere ésta especificación. Sólo un campo Date deberá ser insertado en cualquier tipo de mensaje. Expires (Expiración): Fecha y tiempo de expiración de la entidad. Útil para informar que un recurso probablemente cambiará ( aunque no necesariamente); los proxies y clientes con cache deberán quitar de su cache este recurso después de pasada la fecha indicada en éste campo. From (De): El campo From contiene la dirección del correo electrónico del usuario o cliente, en un formato definido por el buzón del RFC 822 (actualizado por el RFC 1123). Con el uso de proxies, este campo refleja la dirección Internet del cliente original (no del proxy). El propósito del campo From es para informar a un servidor la identidad del usuario, para que en caso necesario el servidor contacte al cliente. Se recomienda que el usuario pueda habilitar o deshabilitar el llenado de éste campo, y que no se emplee como un mecanismo de autenticación cuando de seguridad se trate. lf-Modijie,l-Since (Si-modificado-desde): Este campo es empleado junto al método "GET" para realizar una petición condicional, de tal forma que si el recurso no ha sido modificado desde la fecha indicada en este campo, se regresará un mensaje con un código de respuestanúmero 304 y sin Entity-Body, en caso contrario, si el recurso fue modificado después de la fecha que describe este campo, se procesará la petición como un "GET" normal . En caso de que este campo contenga una fecha inválida, se ignorará y se tratará la petición como un "GET" normal. Éste campo tiene como propósito mejorar el uso de los caches y reducir el tráfico en la red. Last-Modified (Última-modificación): Indica la fecha y hora en que el transmisor cree que fue modificado por última vez el recurso solicitado. El tiempo de última modificación depende de la naturaleza del recurso solicitado y el concepto es diferente para un archivo, como para un objeto virtual o como para una base de datos. 24 Si el receptor tiene una copia de este recurso con una fecha anterior a la que se presenta en este campo, el receptor deberá volver a obtener dicho recurso. Location (Ubicación): Localidad exacta del recurso dado en el campo "Request-URI", descrito en éste campo bajo un formato de URI absoluto. Sólo se permite la definición de un URI absoluto en el campo. Su uso se da en los mensajes de respuesta con códigos números 3xx. MIME-Version (Versión MIME): Versión del MIME empleado para construir el mensaje. Aún cuando la versión 1. O del HTTP no se apega al protocolo de MIME, este campo debería indicar que el mensaje es totalmente especificado como un mensaje MIME bajo la versión que aquí se presente. Por omisión, la versión que se presenta aquí es la "1. O" siendo definida su semántica por este documento y no por el del protocolo MIME. Pragma: El campo Pragma contiene directivas que deberán ser aplicadas a todos los intermediarios a través de la cadena de petición-respuesta, especialmente para los caches y proxies, sin incluir a los entes extremos ( cliente y servidor origen). No existe ninguna forma de indicar una directiva a un único intermediario específico. La única directiva descrita es la de "no-cache", la cual le indica al servidor intermedio que pase la petición al servidor de origen, con el propósito de obtener nuevamente el recurso solicitado. Otras directivas pueden ser empleadas a través de extensiones al Pragma. Referer (Referencias): Este campo permite que un cliente le indique al servidor la dirección URI de donde el recurso indicado por el campo "Request-URI" fue obtenido. Esto le permite al servidor generar listas de ligas anteriores, dar mantenimiento a ligas, etc. Este campo debe ser completado únicamente cuando el recurso fue obtenido de otro que contenga un URI y no por alguno especificado por el usuario mediante el teclado. Además, se debería permitir al usuario el habilitar o deshabilitar el llenado de este campo para no divulgar direcciones privadas. Server (Servidor): Nombra cortamente al software empleado para la creación del servidor de origen, lo cual incluye al software principal y los subproductos, con sus respectivas versiones, y posibles comentarios respecto a los mismos. Cuando un mensaje pase por un proxy, el proxy no deberá añadir su software en este campo. Por cuestiones de seguridad, como es en el caso de la existencia de "agujeros" de seguridad en alguna implementación de un cierto servidor, este campo no debería de ser descrito (ya que revelaría la existencia de dichos "agujeros"). User-Agent (Agente usuario): Al igual que el campo Server, el campo User-Agent nombra brevemente al software principal y los subproductos, junto con sus versiones y posibles comentarios, empleados por el agente usuario ( cliente o browser). Éste campo es útil para el reconocimiento de ciertos clientes en cuanto a sus capacidades y limitaciones. No se recomienda que los proxies añadan los nombres de su software a este campo. 25 WWW-Authenticate (Autenticación del WWW): Este campo es empleado en el proceso de autenticación; siempre incluido en un mensaje con código de respuesta número 40 l. Consiste de al menos un reto que indica el (los) esquema(s) y parámetros aplicables al recurso indicado por el "Request-URI". Pueden existir en un mensaje de respuesta varios encabezados WWW-Authenticate o bien un solo encabezado con una lista de retos separados por comas. 1.4 AUTENTICACIÓN. Autenticación de Acceso El proceso de autenticación se basa en mantener una seguridad de acceso a ciertos recursos dentro de un servidor. El servidor permitirá el acceso a los recursos cuando el esquema de autenticación a seguir sea completado propiamente. Este proceso de autenticación, como ya se mencionó en la sección "Response Messages - Status Codes and Reason Phrases - Código número 401 ", consta de un mensaje enviado por un servidor el cual requiere ser completado y contestado propiamente por el cliente. El mensaje que envía el servidor nombra el (los) esquema( s) del reto a ser contestado junto a un nombre de realm y sus posibles parámetros. La versión 1. O del HTTP define un esquema de autenticación llamado "Basic", aún cuando otros esquemas y/o mecanismos pueden ser empleados. Por otra parte, el atributo de realm es necesario para todas las autenticaciones, y su valor, acompañado de la raíz canónica del URL dentro del servidor que se accesa, forma un espacio de seguridad. Estos espacios de seguridad permiten que dentro de un mismo servidor existan diferentes "zonas" que deben de ser accesadas por diferentes esquemas de acceso. Los espacios de seguridad deberán de ser siempre dentro de un solo servidor y solo podrán extenderse a otros servidores cuando el esquema lo permita. Una vez que el cliente recibe un mensaje con código de respuesta 401, recibe el reto a ser completado y podrá responder con otro mensaje de petición que incluya un campo Authorization. Este campo contendrá las credenciales necesarias que le permitan autentificarse con el servidor dentro del realm solicitado, siendo posible reutilizar las mismas credenciales, una vez que se haya realizado el primer acceso, para otras peticiones que se realicen al mismo espacio de seguridad, siempre y cuando el esquema, parámetros y/o preferencias del usuario lo permitan. En caso de que el servidor no acepte las credenciales enviadas regresará un mensaje con código de respuesta número 403 . Por su parte, los servidores prox.ies no deberán manejar en cache todos los mensajes que sean 26 parte del proceso de autenticación, debiendo dirigir tales mensajes con los encabezados sin alteración alguna. Esta versión del HTTP no define ninguna forma de autentificar un cliente con un proxy. El esquema de autenticación "Basic" El esquema de autenticación que define la vers10n 1.0 del HTTP se denomina Basic. Este esquema es muy simple ya que consta de dos parámetros: el valor del realm dentro del encabezado WWW-Authenticate (en el mensaje de respuesta) y de una credencial simple dentro del encabezado Authorization (en el mensaje de petición). Para este esquema de autenticación, el valor de realm es igual a como se explicó en la sección anterior y no requiere de ningún otro parámetro adicional. La credencial simple de respuesta al reto consta de la unión de la identificación del usuario, el caracter de dos puntos (:) y de la contraseña asignada al usuario, contenido todo esto bajo una codificación Base64 como se describe en el RFC 1521. Este esquema básico se basa en asumir que las conexiones entre cliente y servidor son ya seguras, y se describe como un método no seguro. Para filtrar el acceso no autorizado a los recursos de un servidor de HTTP, se deben emplear mecanismos adicionales que completen la seguridad, tal como podría ser el encriptar previamente el canal de comunicación. A pesar de esto, se recomienda el empleo de este método para poder comunicarse con servidores que ya lo tengan implementado. En base a la revisión del protocolo HTTP dada aquí, se pueden comprender mejor los detalles que en los siguientes capítulos se explican. 27 CAPÍTUL02 PROPUESTAS EXISTENTES DE MODIFICACIÓN AL PROTOCOLO HTTP. Debido a que la versión1.0 actual no satisface todas las necesidades que han surgido a través del uso del protocolo en las diferentes aplicaciones expuestas en Internet, se ha visto la necesidad de modificarlo para cubrirlas. Por esta razón, se presentan a continuación los temas de mayor importancia referentes a los intentos por modificar al protocolo que han surgido desde que se liberó la versión actual. Además, muchas de estas ideas, como se podrá ver más adelante, han sido base para las nuevas caracteristicas propuestas para la futura versión del HTTP 1. 1. 2.1 MECANISMO PARA AÑADIR EXTENSIONES La propuesta de David M. Kristol [5] se basa en el hecho de que pueden surgir nuevas extensiones por parte de los vendedores o creadores de nuevas aplicaciones dentro del WWW, las cuales deben ser manejadas por todos los clientes. Tales extensiones serán añadidas dinámicamente y por lo tanto no habrán sido definidas para cualquier versión de la especificación del HTTP. Para esto, se propone el empleo de un mecanismo que permita añadir nuevas extensiones, "encapsular" mensajes de HTTP, uso de seguridad para las comunicaciones, el empleo de métodos de pago, la notificación para emplear la "paquetización" del mensaJe ( división de un mensaje en otros) y la notificación para mantener las conexiones activas. Por otra parte, ésta propuesta trata de implantar seguridad en las comunicaciones por medio de un mecanismo llamado "wrapping', el cual encapsula un mensaje HTTP en un nuevo mensaje. El mensaje HTTP se podrá encontrar "escondido" dentro del nuevo mensaje para evitar ser visto por terceros que no tengan la autorización para hacerlo. 28 El mecanismo para el uso de nuevas extensiones adiciona dos nuevos métodos y dos nuevos encabezados (las únicas extensiones que se pueden añadir a la definición del HTTP 1. O sin cambiar de versión son los métodos, dentro de los mensajes de petición y la de los encabezados de la entidad). Uno de los nuevos métodos, "GETEXT", permite conocer como debe responder un cliente a un servidor para ciertos recursos cuando se le aplican otros determinados métodos. "WRAPPED" es un método que indica que un mensaje de HTTP se encuentra encapsulado dentro del mensaje que se esta recibiendo; para esto, se requiere de una negociación previa entre cliente y servidor para determinar cuales son los tipos de encapsulamiento que puede soportar el solicitante (cliente) y por lo tanto, permitirle desencapsular el mensaje. Además, el encapsulamiento puede ser recursivo. Con respecto a los encabezados, los nuevos encabezados se definen como "Extension" y "Extension-Order". El primero de ellos describe todas las extensiones y sus atributos aplicables al mensaje, mientras que el segundo determina el orden o prioridad en que deben aplicarse. Para poder notificar el empleo de la "paquetización" y el mantenimiento de la conexiones, se introducen las extensiones: "HTTP/Packetize" y "HTTPIKeepConnection". Respecto al cliente, se propone que para que éste pueda manejar las nuevas extensiones, dicho cliente se implemente de una forma modular, en la que las nuevas extensiones sean manejadas por nuevos módulos que se añadan ( estilo ''plug-in") a un núcleo básico. Tales módulos serían entonces provistos por los vendedores de las nuevas aplicaciones. 2.2 DESCRIPCIÓN DE TAMAÑOS DE DOCUMENTOS POR RANGOS Para poder beneficiar a ciertas aplicaciones que requieren que una parte de un documento les sea provista por un servidor, describiendo a la subparte mediante un rango de bytes, Ari Luotonen [7] propone la introducción de un nuevo parámetro a ser empleado en los URLs que lo soporten, y también introduce un nuevo encabezado para los mensajes de respuesta. Ésta especificación se puede aplicar a documentos en los que tenga sentido el uso de rangos, y para aquellos que no, se tratarán como peticiones inválidas los mensajes que lo contengan. El nuevo parámetro definido se denomina "bytes", se añade al URL deseado y toma como valores un rango ( en bytes por supuesto) de la subparte del documento que se desee se 29 transmita. Se pueden incluir varios rangos dentro de la misma petición, en cuyo caso, la respuesta será un mensaje MIME multiparte. Éste parámetro debe ser construido por el browser y no por el usuario que genera las peticiones. Una vez que el servidor reciba la petición con el rango de bytes, creará la respuesta y añadirá un encabezado al mensaje de respuesta: "Range", el cual notificará al cliente cual es el rango que se esta enviando y cual es el tamaño del documento completo. Otro de los principales factores para estandarizar esta propuesta es el uso de los proxies. Sin una estandarización, cada proxy trataría a las subpartes como un documento completo y mantendría varias copias de éste en cache. Por otra parte, con la estandarización, el proxy podría generar subpartes nuevas de Jo que tenga en cache y quizá reconstruir el documento completo si todas sus partes se encuentran allí. Por lo tanto, un servidor de origen deberá incluir el encabezado Last- Modified en sus mensajes de respuesta, para permitirle al cliente llevar una sincronía de todas las subpartes y volver a solicitar aquellas que se requieran actualizar, y para pennitirle también al proxy actualizar tales subpartes. 2.3 EXTENSIONES DE SESIÓN Dado que uno de los problemas de rendimiento que presenta el protocolo de HTTP es el de crear una nueva conexión por cada petición que se genera, Alexander Hopmann [4] propone una extensión al protocolo que le permita a los clientes mantener una conexión hacia un servidor, y realizar varias peticiones. Ésta propuesta introduce un nuevo encabezado a ser empleado en los mensajes HTTP de petición: el encabezado "Connection: mantain", el cual deberán incluir dentro del primer mensaje de petición aquellos clientes que deseen mantener la conexión que se establezca con el servidor que contacten. Si el servidor entiende este encabezado, contestará con el mismo encabezado dentro de su mensaje de respuesta. Una vez que ambos reconozcan el encabezado, el cliente podrá realizar múltiples peticiones después de la primera, respondiendo el servidor en el mismo orden en que reciba las peticiones, sin la implicación de que el cliente realice peticiones sin esperar por las respuestas previas. Respecto a los proxies, la propuesta define otro encabezado: "Connection: mantain-proxy" que empleará el cliente y el proxy en sus mensajes. Dicho encabezado tiene el propósito de mantener la conexión que se establezca entre el cliente y el proxy, dejando al proxy la libertad de negociar, 30 si así lo desea, el mantenimiento de la conexión que requiera establecer con los servidores de ongen. Por otra parte, para poder mejorar el rendimiento, se propone se almacenen los valores de los encabezados Accept-Charset, Accept-Language y Authent(fication durante el tiempo que perdure la conexión, de tal forma que una vez que se definan, se empleen los valores dados para los mensajes siguientes, y que sólo se vuelva a definir alguno cuando haya que cambiarlo. Un punto que es importante es la observación que hace Hopmman [4] en cuanto a los efectos que se tendrán respecto a la seguridad. Menciona que se reduce el problema de rendimiento para el proceso de autenticación (al enviar sólo un encabezado de autenticación en la primera petición) el cual es cierto, y sin embargo, expresa el hecho de que las siguientes comunicaciones podrían ser interceptadas por un hacker para substituir a la persona original, que solo podría funcionar con los métodos de autenticación no seguros, siendo esto de menor importancia (¿estará seguro de que esto no es relevante? Habría que estudiar la situación). 2.4 MECANISMO PARA LA INFORMACIÓN DE ESTADO Debido al hecho de que el protocolo de HTTP es sin estado, esto es, sin estado porque un servidor de origen no necesita recordar o almacenar información respecto a las peticiones previas para poder atender una nueva,David M. Kristol [6] propone en septiembre de 1995 un mecanismo para poder incluir información del estado en que se encuentran las sesiones de un cliente con un servidor y permitir a las aplicaciones que así lo requieran, como en los programas CGI, conocer la historia de las acciones del cliente. Éste mecanismo propuesto es muy simple, se introduce un nuevo encabezado para todos los mensajes: "State-Info", que será el que contenga la información de estado y que será transmitido del servidor al cliente y viceversa. Con el nuevo encabezado se elimina la necesidad de que si un servidor requiere tener información de estado la almacene localmente. La información que contenga el encabezado "State-Info" es arbitraria y depende solamente de las aplicaciones y el significado que tenga tal información hacia ellas. Además de la introducción del nuevo encabezado, se describe el comportamiento que deben de seguir los clientes, servidores y proxies con respecto a este nuevo campo. 31 2.5 MEJORAS EN LA LATENCIA DEL HTTP Uno de los primeros estudios realizados para determinar los problemas que presenta el uso del protocolo de HTTP en cuanto a rendimiento, fue el análisis realizado por Simon E. Spero [ 11]. Este documento muestra a través de un ejemplo, el de una transacción de petición-respuesta mediante el uso del HTTP, la existencia de varios factores que influyen en el tiempo de respuesta. Entre las observaciones más importantes, del resultado de su trabajo, se pueden mencionar: • Los accesos que se realizan con el HTTP se comportan de acuerdo a un patrón: el cliente solicita un documento y solicita después las imágenes o iconos presentes en el documento; cuando obtiene todo el documento e imágenes, existe una gran probabilidad de que el usuario utilice una liga de hipertexto presente, en cuyo caso, en la mayoría de los casos existe dentro del mismo servidor el documento referenciado. • Parece que HTTP se toma más tiempo en esperar que en transferir los datos. • El establecimiento de la conexión por el TCP requiere un tiempo de un mínimo de 2 R TTs (Round Trip Time), ya que su proceso es por medio de un acuerdo (handshake) de 3 pasos: el cliente envía una solicitud de conexión, el servidor responde y el cliente reconoce (acknowledges) la respuesta del servidor (aunque en éste último paso el cliente también podría enviar datos). • El proceso de Arranque Lento (S/ow Start) que ejecuta el TCP cuando se crean las conexiones, que además son de vida corta con el empleo del HTTP, afecta el rendimiento de todo el proceso, al introducir más RTTs bajo condiciones en que se emplean bajos valores de MSS (Maximum Segment Size) y documentos de mayor tamaño al MSS. • En las redes futuras se puede minimizar relativamente el efecto que tiene el ancho de banda en las comunicaciones, quedándose la latencia como un factor dominante sobre el rendimiento de las mismas. • El tiempo total al utilizar una conexión de TCP ya abierta, en una red con un ancho de banda de 1. 15 Mbps, se calcula para una nueva petición aproximadamente 4 veces menor (comparada con el tiempo total que se toma el crear nuevas conexiones). Aún en el caso de emplear una conexión ya abierta se puede incurrir en la adición de R TTs adicionales ( debido a cada par petición/respuesta). Si además se considera la transmisión de varios documentos, que los encabezados repetidos de los mensajes 32 HTTP se transmiten una sola vez, y que el tiempo que le toma al servidor para procesar las peticiones es independiente del número de objetos pedidos ( esto es, es un tiempo constante que no se multiplica por el número de objetos), el tiempo calculado se reduce en hasta 21 veces. • Otro problema que añade el uso del TCP es el uso del valor Time_ Wait, el cual es el valor de tiempo en que el servidor deberá mantener información respecto a una conexión ya cerrada. El empleo de valores altos para este parámetro reduce considerablemente los recursos disponibles en un servidor cargado. Después de haberse realizado el análisis anterior, Venkata N. Padmanabhan y Jeffrey C. Mogul (10] hicieron otro estudio más para determinar los problemas relativos al tiempo de latencia con el uso del HTTP e introducir nuevas propuestas para mejorar al protocolo. Los autores también concuerdan, al dar sus observaciones sobre los puntos ineficientes del protocolo HTTP, en el hecho de que los retrasos que se presentan al solicitar un documento dependen de la latencia en la red, y que para evitarla hay que evitar el uso de viajes redondos (Round Trips) por la núsma. Entre otras observaciones (que incluyen las mismas que se mencionaron anteriormente), se hace mención a la seguridad: es muy caro el reautenticar en cada petición de HTTP a un usuario. El uso de tamaños muy chicos de la ventana de comunicaciones limita la transferencia (bytes/segundo) sin importar la cantidad de bytes a transmitir; y existe una gran reducción en las transferencias cuando existen transmisiones mayores a los 500 Kbytes, como sucede en el caso de documentos que contengan imágenes. Para minimizar dichos problemas de rendimiento, emplearon el método de mantener las conexiones (una conexión permanecerá abierta para poder procesar múltiples peticiones) y un método de pipelining. Con el mantenimiento de las conexiones se reduce la carga extra sobre el servidor por la creación de nuevas conexiones por petición, y se reducen los retardos generados por el arranque lento (Slow Start) que utiliza el TCP. A partir del hecho de que bajo HTTP un cliente envía una nueva petición para recibir una imagen del documento después de haber recibido una imagen previa (funcionanúento stop-and-wait), el empleo del método de pipelining incurre en la idea de recolectar todas las imágenes sin la necesidad de esperar por las anteriores. Para esto, introducen nuevos métodos aplicables a los recursos dentro de un servidor: el método GET ALL y GETLIST. GET ALL le indica al servidor que deberá enviar todas las imágenes que contenga el documento pedido una después de la otra sin parar. El método GETLIST por su parte, indica que cierto conjunto de documentos o imágenes deberán de enviarse, ya que algunos de éstos pueden encontrarse en cache en el cliente y no habrá necesidad de transmitirlos. 33 Los resultados a los que llegan mediante el empleo de los métodos introducidos son: la latencia se reduce por más del 50% cuando se transfieren imágenes ( de un servidor remoto) con un tamaño de aproximadamente 2 Kb; con imágenes de tamaños en aproximadamente 45 Kb, la latencia se reduce en un 22%. Con esto, se concluye que por lo general el beneficio obtenido es mayor para el empleo de imágenes pequeñas y por al menos un número moderado de las mismas. Después del estudio mencionado anteriormente, Jeffiey C. Mogul [8] realizó un reporte de investigación más completo respecto al tema. El reporte del Caso del HTTP de Conexión Persistente, toma como base la propuesta de modificación al HTTP del estudio mencionado anteriormente y realiza una simulación, empleando datos obtenidos de servidores en funcionamiento real, del desempeño que se lograría. En el estudio se presentan todos los parámetros que se involucran por el empleo de conexiones TCP y como sus valores afectan a las comunicaciones del HTTP. Los parámetros incluyen el número máximo de conexiones que podrá mantener un servidor, el tiempo máximo de inactividad de una conexión ( antes de ser desconectada forzosamente), el tiempo inicial de inactividad de la conexión (cuando se emplea un método adaptivo de desconexión), el tamaño de la tabla que lleve el control de las conexiones, etc. Los resultados que se obtuvieron muestran que: • El número máximo de conexiones simultáneas de TCP que puede tener un servidor son pocas: cerca de 30 para un servidor comercial. Con éste número de conexiones simultáneas se tiene un bajo rechazo de conexiones nuevas. • La reutilización de una conexión lograun 88% de "open connection hits" cuando se emplea un valor de 1 minuto como tiempo de inactividad. Si el tiempo de inactividad fuese aumentado, mejoraría el índice de 'open connection hits' y el desempeño que percibe un usuario, aunque se incrementaría la demanda de recursos de memoria para el manejo de las tablas que tienen el control de las conexiones TCP, y por lo tanto el trabajo del CPU se incrementaría para el manejo de la misma tabla. • Para un valor de 32 conexiones máximas y 1 minuto como tiempo de inactividad, se tiene una media de 3 peticiones HTTP que puede satisfacer el servidor por conexión; El número de peticiones máximas por conexión llega para estos valores a cerca de 2000. • Los clientes pueden lograr en el mejor de los casos hasta 20 peticiones por conexión (con valores en el servidor de 32 conexiones máximas y un tiempo de inactividad de 1 O segundos); la mitad de los clientes solo podrá lograr hasta 4 peticiones por conexión. • Respecto a la congestión en la red, se tiene un cálculo aproximado de lo que 34 sucedería: Si se emplean las conexiones persistentes, con valores de 1024 conexiones máximas y un tiempo de inactividad de 2 minutos, se elimina más del 95% de conexiones TCP, con la subsecuente eliminación de un 38% de la carga total de paquetes que fluyen por la red. • Los patrones de acceso al W3 muestran una fuerte referencia de localidad temporal. Una de las observaciones que se presenta es que se ha atacado el problema del tiempo de latencia por diferentes formas, donde el navegador de Netscape™ ofrece la solución de tener múltiples conexiones en paralelo. La desventaja que puede presentar esta solución es la existencia de una probabilidad mayor para congestionar la red. 2.6 HTTP-NG (HTTP-NEXT GENERA TION) El protocolo de HTTP-NG [12],[13] es la propuesta hecha por Simon E. Spero para la mejora en rendimiento del protocolo de HTTP 1.0, a través de características adicionales orientadas a las aplicaciones comerciales. Estas características adicionales comprenden la transferencia de varios objetos en una sola conexión, el apoyo a la transferencia de objetos encriptados, capacidad de permitir la autenticación entre las entidades que lo requieran, y el empleo de varios mecanismos de pago virtual y autenticación. Se basa en mejorar al HTTP 1. O al permitir el envío de varias peticiones dentro de una sola conexión. Las peticiones no requieren que el cliente se espere a recibir respuesta de una antes de enviar la siguiente. El servidor puede responder a las peticiones en el orden que considere conveniente. Para poder llevarse a cabo, el modelo de HTTP-NG crea una sola conexión de TCP y la divide en diferentes sesiones virtuales, en la que cada sesión se trata como un canal de comunicación diferente. Se envían todos los mensajes de datos en un canal, y los mensajes de control se envían en un canal de control aparte. Ésta división de la conexión TCP es llevada a cabo por una capa llamada SCP (Session Control Protocol) en la que se define un nuevo formato para los paquetes a transmitir. Ésta división permite también el uso de tecnologías de red orientadas a varios canales como en el caso de ATM. Una de las mejores formas de pasar del protocolo HTTP 1.0 al HTTP-NG es mediante el uso del 35 HTTP-NG en los servidores proxy. De ésta forma, dos servidores proxy intermedios entre el cliente y el servidor de origen, que se encuentren cercanos a los extremos, tomarán ventaja del HTTP-NG en las distancias mayores. Su implementación se puede lograr mediante uno de los siguientes métodos: mediante el empleo de un modelo de RPC síncrono con funcionamiento similar al del HTTP 1.0, mediante un modelo basado en eventos, o bien, mediante una implementación con multi-hilos (multithreading). El modelo de multithreading ofrece más ventajas al permitir que cada canal tenga su propio hilo (thread) y con esto una forma de procesamiento paralelo. 2. 7 SHTTP (SECURE HTTP) Actualmente, las sesiones que se realizan entre clientes (browsers) y servidores del W3, carecen de una implementación fuerte de seguridad. El producto NetscapeTM ofrece seguridad mediante el uso del encriptamiento por RSA, y aún así, ya ha sido atacado en sus mensajes, lográndose conocer su conterúdo. El protocolo SHTTP (versión 1.1) es un protocolo propuesto para ofrecer seguridad en las transacciones que se realicen en el W3 mediante el uso del protocolo HTTP. La primera versión (versión 1.0) fue propuesta a mediados de 1994 y mediante revisiones se logró la versión 1.1 a finales del mismo año. Se espera que esta versión siga evolucionando para su mejora y que quizás sea integrada en las futuras versiones del protocolo HTTP. SHTTP es en sí, una extensión al protocolo HTTP, en el cual se proveen servicios de seguridad como son la confidencialidad, autenticación, integridad de datos y no-repudiación del origen. Cuenta con una variedad de mecanismos de administración de llaves para usar en el encriptamiento, diferentes opciones de algoritmos para encriptamiento, modelos de confianza y formatos de encapsulamiento, que permiten una gran selección de modos de operación. La selección del modo de operación se realiza mediante una negociación previa entre el cliente y el servidor. Esta variedad de modos de operación es importante porque un atacante no podrá conocer en un instante sobre que método de seguridad en particular se esta realizando la comunicación (los ataques se vuelven más dificiles) . 36 Con respecto al encriptamiento, SHTTP no requiere de llaves públicas ( originadas por el cliente), ya que sus modos de operación requieren llaves de sesión simétricas, lo cuál permite tener transacciones privadas espontáneas sin la necesidad de que el cliente tenga una llave pública ya establecida. Características principales: La protección de mensajes se puede dar mediante la aplicación individual o combinada de los servicios de firma digital, autenticación o encriptamiento. Se incluye también la no-protección ( empleo de ningún servicio de seguridad). Los mecanismos de distribución de llaves múltiples incluyen el uso de passwords, intercambio de llaves bajo el modelo de llave pública y la distribución de tickets que proporciona el sistema de autenticación de Kerberos. Adicionalmente, un mecanismo de challenge-response llamado "nance" permite a las entidades en comunicación verificar la "frescura" de las transacciones. Al emplear el servicio de firma, un certificado apropiado se inserta en el mensaje, o el transmisor puede esperar que el recipiente obtenga el certificado por separado (de manera independiente). El servicio de encriptamiento define dos mecanismos de transferencia de llaves: intercambio de llaves in-band empleando llaves públicas o mediante llaves dadas externamente (out-band) . El intercambio in-band pasa el parámetro del criptosistema de llaves simétricas encriptado bajo la llave pública del receptor. Con las llaves externas, se emplea una llave de sesión predeterminada, con su información de identificación dada en una de las líneas del encabezado del mensaje; también se puede aquí tomar la llave que se encuentre en los tickets de Kerberos. La autenticación se puede lograr mediante la verificación de la integridad del mensaje y la 37 autenticidad del emisor, a través del MAC (Message Authentication Code), calculado sobre la base del documento y empleando una llave compartida (seleccionada con anterioridad, que como ejemplos podría ser de forma manual o vía Kerberos ); con esto no se requiere de un sistema a llave pública, ni de encriptamiento. La operación de este protocolo se basa en el encapsulamiento de mensajes, que pueden ser, ya sea de otro mensaje SHTTP, de un mensaje HTTP o simplemente de datos. Por lo tanto, un mensaje de SHTTP esta formado por una línea de petición o de status, una serie de encabezados y por un contenido encapsulado (que es en sí el mensaje a transferir).
Compartir