Академический Документы
Профессиональный Документы
Культура Документы
-
DESARROLLO
Protocolo HTTP
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).
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:
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.
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.
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.
DELETE
Este método simplemente borra el archivo indicado en la URL.
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).
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)
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
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)
HTTP/1.1 200 OK
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).
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).
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.
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.
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.
410 (Gone), este código indica que el recurso solicitado por el navegador no se encuentra
alojado en el servidor, de forma permanente.
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).
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.
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.
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: img/gif;
Content-Type: application/json;
“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
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:
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/
curl -v http://unicorestereo.unicordoba.edu.co/
EJERCICIOS/ACTIVIDADES
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.
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.