Вы находитесь на странице: 1из 16

Protocolo HTTP

-
DESARROLLO

Protocolo HTTP

El protocolo HTTP (hypertext Transfer Protocol) es un protocolo de comunicación de la capa de


aplicación del modelo OSI, utilizado en la web para el intercambio de documentos HTML, hojas de
estilo CSS, archivos JavaScript, imágenes etc.

El protocolo HTTP se basa en sencillas operaciones petición-respuesta donde la petición es generada


por el cliente (navegador web) el cual es envía servidor web y este retorna una respuesta similar que
contiene el estado de la operación y sus posibles resultados (Fielding & Reschke, Hypertext Transfer
Protocol (HTTP/1.1): Message Syntax and Routing, 2014) . En la figura 1 vemos como es el
comportamiento de una solicitud y respuesta HTTP.

( Kurose & Ross, Comportamiento solicitud-respuesta de HTTP [Figura 1], 2010)

Cada una de las peticiones realizadas por el cliente utilizando el protocolo HTTP está conformada por
un grupo de líneas de texto, en esta peticiones existen dos tipos de mensajes, los de petición (request)
y los de respuesta (response), en una petición incluye una primera línea de texto la cual contiene le
método que desea ejecutar el cliente, contiene un identificador universal de recursos (URI) y una
versión del protocolo HTTP y en la primera línea de los mensajes de respuesta incluye la versión del
protocolo HTTP seguido de un código de estado HTTP respectivo con su mensaje.
Pares de un mensaje

El protocolo HTTP está basado en mensajes de texto compuestos de una línea inicial, unos
encabezados y un cuerpo. A continuación vemos un pequeño esquema de las partes de un mensaje con
sus peticiones y respuestas.

Petición
Respuesta

Mensaje

<Método><URI><HTTP/versión>
Línea inicial
HTTP/<versión> <código de respuesta>
<mensaje de código>
Host: www.example.com
Encabezados User-Agent: nombre-cliente

Content-Type: text/html
Content-Length: 45

Datos vacios
Cuerpo
Contenido HTML

Primera línea del mensaje donde se indica que hacer (mensaje de petición) o que ha ocurrido (mensaje
de respuesta).

Línea inicial de una solicitud:


GET / HTTP/1.1

Línea inicial de una respuesta:


HTTP/1.1 200 OK

Los encabezados brindan piezas clave de información. Tanto para las solicitudes como para las
respuestas, que permiten al cliente y al servidor comunicarse eficazmente. Esta información adicional
obtiene los datos del cuerpo a donde debe ir e instruye al objetivo sobre qué hacer cuando llegue allí.
A continuación se aprecian algunos de los encabezados que podrían aparecer en una solicitud y
respuesta.
Encabezados de la solicitud:

Host: www.lornajane.net
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/
*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/43.0.2357.81 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

Encabezado de la respuesta:

Server: Apache/2.4.7 (Ubuntu)


X-Powered-By: PHP/5.5.9-1ubuntu4.6
X-Pingback: http://www.lornajane.net/xmlrpc.php
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Content-Length: 7897
Accept-Ranges: bytes
Date: Sat, 11 Jul 2015 08:22:57 GMT
X-Varnish: 600223060
Age: 0
Via: 1.1 varnish
Connection: keep-alive

EL Cuerpo del mensaje está presente tanto en la solicitud como en la respuesta de la petición. Su
presencia en la solicitud es opcional, depende de la petición y su resultado.
Ejemplo: si realizamos una petición a un servidor el contenido del cuerpo está determinado por el
tipo de recurso.

<html lang="es">
<head>
<meta charset="utf-8">
<title>Título del sitio</title>
</head>
<body>
<h1>Página principal de tuHost</h1>
(Contenido)
</body>
</html>
Métodos de acceso

Los métodos de acceso o también conocidos como “verbos”, indican la operación a realizar sobre los
recursos indicados en la petición del cliente. (Fielding & Reschke, RFC 7231 - Hypertext Transfer
Protocol (HTTP/1.1): Semantics and Content, 2014)

El protocolo HTTP define un conjunto operaciones. Todas las peticiones HTTP deben incluir el tipo
de operación que se desea realizar y el recurso sobre el cual se desea hacer la operación.

GET /index.html HTTP/1.1

En este caso GET es el método que utilizamos para realizar la operación e index.html es el recurso
sobre el cual vamos a realizar la operación.

HTTP define 8 métodos con los cuales podemos realizar distintas operaciones sobre los recursos.
Estos métodos incluyen opciones para obtener, grabar o borrar recursos. Los cuales se describen a
continuación:

 GET:
Este método se utiliza para recoger cualquier tipo de información del servidor. Este método
puede solicitar recursos nombrados en la URL. Por seguridad no debería utilizarse en
aplicaciones web ya que permite él envió de información agregando parámetros ala URL.
Ejemplo: al solicitar llevar un formulario el usuario puede introducir datos directamente en la
URL y enviarlos al archivo donde se van a procesar los datos, saltándose las validaciones que
podría tener el formulario.

GET /index.html HTTP/1.1

 HEAD:

Es similar al método GET, con la excepción que este solo pide la cabecera del objeto y no
retorna el cuerpo de la respuesta. Es utilizado por los gestores de caches de páginas o
servidores proxy para conocer cuando es necesario actualizar la copia de la página que se
mantiene en un fichero.

 POST :
Este método envía información al servidor. Proporcionando datos al recurso nombrado en la
URL, estos datos son enviados en el cuerpo del mensaje. Normalmente los datos preceden de
un formulario web luego estos datos son procesados en el recurso nombrado en la URL.

 PUT:
Este método realiza una actualización del recurso especificado en la URL. Esta es una de las
formas más eficientes de actualizar y subir archivos a un servidor. Una pequeña desventaja de
este método es que los servidores de hosting compartido no lo tiene habilitado.

PUT /ruta/index.html HTTP/1.1

 DELETE
Este método simplemente borra el archivo indicado en la URL.

DELETE /ruta/index.html HTTP/1.1

 TRACER
Este método realiza una solicitud al servidor para que este envié nuevamente el mensaje de
respuesta. Con el fin de realizar comprobaciones y diagnósticos.

 OPTIONS
Este método solicita al servidor que muestre todos los métodos que soporta para la URL
específica. Es muy útil para la verificar la funcionalidad del servidor.

 CONNECTN
Se utiliza para saber si se tiene acceso a un host, no necesariamente la petición llega al
servidor, este método se utiliza principalmente para saber si un proxy nos da acceso a un host
bajo condiciones especiales, como por ejemplo "corrientes" de datos bidireccionales
encriptadas (como lo requiere SSL).

Estructura de una Petición HTTP

Para poder acceder a los recursos que tiene alojado un servidor web, el cliente (navegador web) debe
enviar una petición esta la cual debe tener el método por el cual desea realizar las operaciones sobre
los recursos del servidor, el recurso que desea obtener y la versión del protocolo. Opcional mente esta
petición puede incluir un conjunto de encabezados y/o un contenido. .A continuación en la figura 2
puede apreciar mejor la estructura de una petición HTTP.
(Kurose & Ross, Formato general de un mensaje de solicitud HTTP [Figura 2], 2010)

Ejemplo de una petición HTTP:

GET /index.html HTTP/1.1

Host: www.lornajane.net
Connection: keep-alive
Cache-Control: no-cache
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/
*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
Gecko) ...
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6

Estructura de una Respuesta HTTP

Posteriormente después de recibir cualquier petición, el servidor web origina un mensaje de respuesta
el cual es enviado de vuelta al cliente (navegador web). Este mensaje contiene con código HTTP de
respuesta el cual incluye un mensaje. Cuando la petición se ha realizado con éxito, la respuesta
generada por el servidor incluye un conjunto de encabezados y contenidos. A continuación en la
figura 3 se puede apreciar mejor la estructura de una respuesta HTTP.
(Kurose & Ross, Formato general de un mensaje de respuesta HTTP [Figura 3], 2010)

Ejemplo de una respuesta a una petición:

HTTP/1.1 200 OK

Server: Apache/2.4.7 (Ubuntu)


X-Powered-By: PHP/5.5.9-1ubuntu4.6
X-Pingback: http://www.lornajane.net/xmlrpc.php
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Content-Length: 8806
Date: Tue, 15 Sep 2015 08:43:54 GMT
X-Varnish: 612483212
Age: 0
Via: 1.1 varnish
<html lang="es">
<head>
<meta charset="utf-8">
<title>Título del sitio</title>
</head>
<body>
<h1>Página principal de tuHost</h1>
(Contenido)
.
</body>
</html>
Códigos de estado HTTP

Los códigos de estado HTTP están compuestos por de tres dígitos enteros dando el resultado del
intento de comprender y satisfacer una petición. El primer dígito del código de estado define la clase
de la respuesta. Los dos últimos dígitos definen específicamente la respuesta (Fielding & Reschke,
RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content, 2014).

Códigos de estado 1XX


Son códigos informativos los cuales informan al navegador la siguiente acción a realizar. Entre los
más comunes tenemos:

 100 (Continúe), indica que la solicitud ha sido entregada correctamente y puede continuar al
envió de la respuesta.

 101 (Switching Protocols), el servidor entiende y acepta el cambio de protocolo propuesto por
el navegador (ejemplo: cambiar de HTTP 1.0 a HTTP 1.1).

Códigos de estado 2XX


Esta esta clase de código indica que la solicitud del cliente fue recibida, entendida y aceptada con
éxito. Entre los más comunes tenemos:

 200 (Ok), indica que la petición del navegador se ha completado con éxito.

 202 (Accepted), indica que la petición del navegador fue admitida con éxito pero todavía se
encuentra en trámite.

 203 (Non-Authoritative Information), este código indica que la petición fue exitosa, pero
también indica que el contenido no se ha obtenido del servidor donde se realizó la petición
sino de otro servidor

 204 (No Content), indica que la petición se ha completado con éxito pero su respuesta no tiene
ningún contenido.

 205 (Reset Content), indica que la petición se ha completado con éxito pero su respuesta no
tiene ningún contenido, además indica que el navegador debe restablecer la vista del
documento.

Códigos de estado 3XX


Indican que el navegador debe realizar alguna acción adicional para que la petición se complete. Entre
los más comunes tenemos:
 300 (Multiple Choices), este código indica que el archivo solicitado tiene más de una
representación.

 301 (Moved Permanently), el recurso solicitado por el navegador se encuentra en otro sitio
permanentemente por lo cual el navegador es redirigido automáticamente a la nueva
localización de ese recurso.

 302 (Moved Temporarily), el recurso solicitado por el navegador se encuentra en otro sitio por
tiempo limitado por lo cual el navegador es redirigido automáticamente a la nueva localización
de ese recurso.

 303 (See Other), el recurso solicitado por el navegador se encuentra en otro sitio
permanentemente. Pero el navegador no es redirigido automáticamente a la nueva localización
de ese recurso pero le proporciona la URI del recurso que solicita.

 307 (Temporary Redirect), este código indica que el recurso solicitado se encuentra
temporalmente en otro sitio bajo una URI diferente. Pero solo para esta petición, para futuras
peticiones se utiliza la localización original del recurso.

Códigos de estado 4XX


Indican que hubo un error por parte del cliente (navegador):

 400 (Bad Request), indica un error en la petición realizada por el navegador por lo cual el
servidor no puede responder esta solicitud. Este error se puede dar por la sintaxis de solicitud
mal formada, la solicitud no es válida o solicitud de enrutamiento engañosa.

 403 (Forbidden), indica que la petición realizada por el navegador es correcta pero no tiene
autorización para acceder al recuro que solicita.

 404 (Not Found),este código indica que el recurso solicitado por el navegador no se encuentra
alojado en el servidor, pero no es posible determinar si la ausencia del recurso es permanente o
temporal.

 405 (Method Not Allowed), indica que el navegador al realizar una petición ha utilizado un
método el cual no es permitido por parte del servidor para acceder a al recuro solicitad.
 406 (Not Acceptable), este código indica que el recuro solicitado tiene un formato el cual no es
aceptado por el navegador según la petición que ha realizo.

 408 (Request Timeout), indica de que el navegador ha accedido el tiempo permitido de espera
para la realización de la petición al servidor. Pero siempre puede realizar una nueva petición.

 409 (Conflict), la petición realizada por el navegador no es posible completarla por un


conflicto en el recurso solicitado.

 410 (Gone), este código indica que el recurso solicitado por el navegador no se encuentra
alojado en el servidor, de forma permanente.

 411 (Length Required), el servidor rechaza la solicitud, porque la petición no incluye la


cabecera Content-Length adecuada.

 413 (Request Entity Too Large), el servidor no puede procesar la solicitud, puesto que la
petición es demasiado grande.

 414 (Request-URI Too Long), este código indica que la URI de la petición es demasiada
extensa para ser procesada por el servidor (por lo regular sucede cuando el navegador envía la
petición con el método GET en vez del método POST).

 415 (Unsupported Media Type), el servidor no puede procesar la petición puesto que tiene un
formato el cual no entiende.

 417 (Expectation Failed), el servidor no es capaz procesar la petición puesto que no puede
cumplir con las requisitos de la cabecera Expect de la petición.

 426 (Upgrade Required), el navegador debe cambiar a un protocolo diferente para realizar las
peticiones (por ejemplo TLS/1.0).

Códigos de estado 5XX


Indican que se ha producido un error al prosear la petición en el servidor:

 500 (Internal Server Error), indica que se ha producido un error inesperado en el servidor al
tratar completar la petición realizada por el navegador.

 501 (Not Implemented), este código indica que el servidor no admite alguna funcionalidad que
requiere para responder a la solicitud del navegador.
 502 (Bad Gateway), indica que el servidor realiza el papel de proxy o gateway y ha recibido
una respuesta inválida del otro servidor, por lo que no puede responder adecuadamente a la
petición del navegador.

 503 (Service Unavailable), indica que el servidor actualmente se encuentra en mantenimiento


por lo cual no puede responder a la petición del navegador.

 504 (Gateway Timeout), indica que el servidor realiza el papel de proxy o gateway y no
recibido ninguna una respuesta oportuna del otro servidor adyacente, por lo que no puede
completar la solicitud del navegador.

 505 (HTTP Version Not Supported), el servidor no soporta soportar la versión del protocolo
HTTP utilizada en la petición del navegador.

Tipos de contenido (MIME-Types)

Un "tipo de medios" (definido en [RFC2045] y [RFC2046]) especifica la naturaleza de un recurso


vinculado. Esta especificación emplea el término "tipo de contenido" en lugar de "tipo de medio" de
acuerdo con el uso actual. Además, en esta especificación, "tipo de medio" puede referirse a los
medios en los que un agente de usuario procesa un documento. El tipo de contenido se especifica en el
encabezado de la respuesta con la siguiente estructura: <Tipo>/<Subtipo>; <parámetros opcionales>

Por ejemplo, una respuesta HTTP puede contener en el encabezado una línea de texto indicando que el
contenido. Algunos de ellos son:

Content-Type: text/html; charset=UTF-8

Content-Type: img/gif;

Content-Type: application/json;

Identificador de recursos (URI)

“El esquema URI "https" se define por este medio con el propósito de acuñar identificadores de
acuerdo con su asociación con el sistema jerárquico espacio de nombres gobernado por un potencial
servidor de origen HTTP escuchando un dado puerto TCP para TLS-conexiones seguras” (Fielding
& Reschke, RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content, 2014)

El objetivo de una petición HTTP es traer un recurso, que de manera natural no se encuentra definido,
pues puede ser una foto, un documento o cualquier otro tipo de recurso. Cada recurso es identificado
por una URI (uniform resource identifier) el cual se implementa atreves de HTTP para identificar el
recurso.
Para que un cliente pueda realizar una conexión con un servidor se debe de especificar el nombre del
dominio o dirección IP de dicho servidor. Está dirección HTTP se denomina URL y se compone de
las siguientes partes:

Scheme: //host[:port]/path[?queryString][#fragment]

Ejemplo: https://www.ejemplo.com:80/inicio/index.html?var1=value1#segmento

Esquema http:// es el protocolo. Indica que el


protocolo debe utilizar el navegador.
Autoridad: www.ejemplo.com es el nombre de
dominio o autoridad que gobierna el
espacio de nombres. Indica cuando es
solicitado el servidor Web
Puerto: : 80 es el puerto en este caso. Indica la
técnica "puerta" usada para acceder a los
recursos en el servidor web.
Ruta de Acceso: /inicio/index.html es la ruta de acceso al
recurso en el servidor Web.
Consulta: ?var1=value1 son unos parámetros
adicionales proporcionados al servidor
Web
Fragmento: #segmento es un ancla a otra parte del
propio recurso.

CURL

Es una herramienta de líneas de comando que nos permite realizar cualquier tipo de petición HTTP en
la web y observar en detalle que información se comparte entre el cliente y el servidor tanto de la
petición como el de la respuesta (Curl, 2017). En su forma más básica, una petición cURL se puede
hacer de la siguiente manera:

curl https://www.ejemplo.com // solo nos muestra el cuerpo de la respuesta

Para observar todo el contenido de la petición (línea inicial, encabezados, cuerpo) utilizamos la
siguiente línea:

curl -v https://www.ejemplo.com
Ejemplo:

http://unicorestereo.unicordoba.edu.co/

A continuación ejecutaremos el siguiente comando curl -v [URL de la página], observaremos la


petición realizada por el navegador seguido de la respuesta del servidor

curl -v http://unicorestereo.unicordoba.edu.co/
EJERCICIOS/ACTIVIDADES

Actividades planteadas a desarrollar en clase o individualmente


BIBLIOGRAFIA

Kurose, J., & Ross, K. (2010). Comportamiento solicitud-respuesta de HTTP [Figura 1]. En Redes de
computadoras, 5ta (pág. 97). Pearson Educación de México, S.A. de C.V.

Curl. (2017). curl. Obtenido de Curl.haxx.se: https://curl.haxx.se/

Fielding, R., & Reschke, J. (Julio de 2014). Hypertext Transfer Protocol (HTTP/1.1): Message Syntax
and Routing. Obtenido de Tools.ietf.org: https://tools.ietf.org/html/rfc7230

Fielding, R., & Reschke, J. (Junio de 2014). RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1):
Semantics and Content. Obtenido de Tools.ietf.org: https://tools.ietf.org/html/rfc7231

Kurose, J., & Ross, K. (2010). Formato general de un mensaje de respuesta HTTP [Figura 3]. En
Redes de computadoras, 5ta (pág. 104). Pearson Educación de México, S.A. de C.V.

Kurose, J., & Ross, K. (2010). Formato general de un mensaje de solicitud HTTP [Figura 2]. En
Redes de computadoras, 5ta (pág. 102). Pearson Educación de México, S.A. de C.V.

Вам также может понравиться