El post que buscas se encuentra eliminado, pero este también te puede interesar

HTTP para newbies y no tan newbies

# Encabezado

Buenas, hoy les traigo un vistazo a HTTP, el Hyper Text Transfer Protocol (Protocolo de Transferencia de HiperTexto).

Les comento cómo viene la mano: Qué vas a encontrar acá?

Vamos a repasar qué es lo que pasa desde el moment en que en tu browser escribís www.taringa.com hasta que se carga totalmente la página. O lo que podés recibir en vez de la página.

- Qué es HTTP?
- Cómo se realizan las transacciones HTTP?
- Solicitudes y Respuestas HTTP.
- Código de errores HTTP, como el 200, el 301, el 404, el 503...

Para los newbies, incluyo una descripción completa con ejemplos fáciles, para que sea entendible. Para los no tan newbies incluyo, en cursiva, una ampliación de los conceptos con lenguaje técnico, en secciones llamadas Tecnicismos. Sientanse libres de saltear esas secciones.

# Fin del Encabezado

# Cuerpo


Al escribir una URL en la barra de direcciones y dar enter, estamos tratando de conectarnos con un servidor que nos mostrará la página que queremos ver. Algo que hacemos todos los días, no?. Veamos qué pasa detrás de bambalinas.

Tenemos 3 entidades participantes:

El cliente: Puede ser un browser (firefox, chrome, opera, ie, etc) o quizás una consola (utilizando wget o quizás lynx). Desde él voy a intentar conectarme a...

El servidor: Es la máquina que contiene la información (recurso) que estoy buscando, como wikipedia, taringa, la compu de mi amigo llena de archivos interesantes, etc.

Los mensajes: Cliente y servidor se comunican entre ellos mandando mensajes. Del cliente al servidor se envían pedidos. Del servidor al cliente se envían las respuestas a esos pedidos (que trataremos a lo largo del thread), y la información o recurso que pedimos.

Para que ambos entiendan esos mensajes, deben comunicarse en el mismo "lenguaje" o, en términos técnicos, protocolo. El más utilizado actualmente es el http. Te suena, no? Y claro, cuántas veces habrás tecleado http://www.taringa.com ?

# Tecnicismos

Desde 1990, el protocolo HTTP (Protocolo de transferencia de hipertexto) es el protocolo más utilizado en Internet. La versión 0.9 sólo tenía la finalidad de transferir los datos a través de Internet (en particular páginas Web escritas en HTML). La versión 1.0 del protocolo (la más utilizada) permite la transferencia de mensajes con encabezados que describen el contenido de los mensajes mediante la codificación MIME.

El propósito del protocolo HTTP es permitir la transferencia de archivos (principalmente, en formato HTML). entre un navegador (el cliente) y un servidor web (denominado, entre otros, httpd en equipos UNIX) localizado mediante una cadena de caracteres denominada dirección URL.

Desde el punto de vista de las comunicaciones, HTTP está soportado sobre los servicios de conexión TCP/IP, y funciona de la misma forma que el resto de los servicios comunes de los entornos UNIX: un proceso servidor escucha en un puerto de comunicaciones TCP (por defecto, el 80), y espera las solicitudes de conexión de los clientes Web. Una vez que se establece la conexión, el protocolo TCP se encarga de mantener la comunicación y garantizar un intercambio de datos libre de errores.

HTTP se basa en sencillas operaciones de solicitud/respuesta. Un cliente establece una conexión con un servidor y envía un mensaje con los datos de la solicitud. El servidor responde con un mensaje similar, que contiene el estado de la operación y su posible resultado. Todas las operaciones pueden adjuntar un objeto o recurso sobre el que actúan; cada objeto Web (documento HTML, fichero multimedia o aplicación CGI) es conocido por su URL.

Las principales características del protocolo HTTP son:

- Toda la comunicación entre los clientes y servidores se realiza a partir de caracteres de 8 bits. De esta forma, se puede transmitir cualquier tipo de documento: texto, binario, etc., respetando su formato original.-
Permite la transferencia de objetos multimedia. El contenido de cada objeto intercambiado está identificado por su clasificación MIME.
- Existen tres verbos básicos (hay más, pero por lo general no se utilizan) que un cliente puede utilizar para dialogar con el servidor: GET, para recoger un objeto, POST, para enviar información al servidor y HEAD, para solicitar las características de un objeto (por ejemplo, la fecha de modificación de un documento HTML).
- Cada operación HTTP implica una conexión con el servidor, que es liberada al término de la misma. Es decir, en una operación se puede recoger un único objeto.
- No mantiene estado. Cada petición de un cliente a un servidor no es influida por las transacciones anteriores. El servidor trata cada petición como una operación totalmente independiente del resto.
- Cada objeto al que se aplican los verbos del protocolo está identificado a través de la información de situación del final de la URL.

# Fin de Tecnicismos


Comunicación entre Servidor y Cliente

HTTP para newbies y no tan newbies

- El navegador realiza una solicitud HTTP
- El servidor procesa la solicitud y después envía una respuesta HTTP

Hay dos tipos de mensaje HTTP: Solicitudes y Respuestas. Cada una se compone de 3 partes.

Solicitudes HTTP

Una solicitud HTTP es un conjunto de líneas que el cliente (el navegador) envía al servidor indicandole qué quiere hacer, cómo lo quiere hacer, y dandole información sobre si mismo (qué navegador soy, qué versión, en qué sistema operativo estoy corriendo, qué lenguajes y protocolos acepto, etc). Cuenta con 3 partes: Linea de solicitud, Encabezado y Cuerpo.

Ejemplo:

GET /post/novatos HTTP/1.1
Host: www.taringa.com
User-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive


* Línea de solicitud:
Es una línea que especifica el tipo de documento solicitado, el método que se aplicará y la versión del protocolo utilizada. La línea está formada por tres elementos que deben estar separados por un espacio:
el método
la dirección URL
la versión del protocolo utilizada por el cliente

* Encabezado:
Es un conjunto de líneas opcionales que permiten aportar información adicional sobre la solicitud y/o el cliente (navegador, sistema operativo, servidor contactado, etc.). Cada una de estas líneas está formada por un nombre que describe el tipo de encabezado, seguido de dos puntos y el valor del encabezado.

* Cuerpo:
Es un conjunto de líneas opcionales que deben estar separadas de las líneas precedentes por una línea en blanco y, por ejemplo, permiten que se envíen datos al servidor, usando el método POST.

# Tecnicismos

mensajes

errores

# Fin de Tecnicismos


Respuestas HTTP

Una respuesta HTTP es un conjunto de líneas que el servidor envía al navegador. En ésta le dice si entendió o no la solicitud, si la va a procesar, si está pidiendo algo inválido, etc. Consta de 3 partes: Linea de solicitud, Encabezado y Cuerpo.

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es" >
<head profile="http://purl.org/NET/erdf/profile">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<link rel="alternate" type="application/atom+xml" title="Ultimos Posts" href="http://www.taringa.net/rss/home/ultimos-posts/" />

* Línea de solicitud:
Es una línea que especifica la versión del protocolo utilizada y el estado de la solicitud en proceso mediante un texto explicativo y un código. La línea está compuesta por tres elementos que deben estar separados por un espacio:
la versión del protocolo utilizada
el código de estado
el significado del código

* Encabezado:
Es un conjunto de líneas opcionales que permiten aportar información adicional sobre la respuesta y/o el servidor. Cada una de estas líneas está compuesta por un nombre que califica el tipo de encabezado, seguido por dos puntos y por el valor del encabezado.

* Cuerpo:
Contiene el documento solicitado, en este caso, ese es el código fuente de la sección novatos de Taringa, que es lo que solicitamos más arriba.

# Tecnicismos

http

# Fin de Tecnicismos


Códigos de Estado HTTP

En el encabezado de las respuestas HTTP se encuentra algo llamado códigos de estado. Los códigos de estado HTTP se componen de 3 números:

1 - 1xx: Respuestas informativas que indican "Petición recibida, continuando proceso".

Estos códigos son exclusivos del protocolo HTTP 1.1, con lo cual las páginas que usan el anterior, HTTP 1.0, no deberían recibir estos códigos, ya que no los entenderían.

Mensajes:

100 Continúa
Esta respuesta significa que el servidor recibió la primer parte del pedido (el encabezado) y no la rechazó, que es momento que el cliente mande el resto (el cuerpo). "Hola, acá estoy, qué querés?"

respuestas

101 Conmutando protocolos
El cliente le pide al servidor que cambie el protocolo. El servidor envía un mensaje 101 para indicar que hará el cambio Inmediatamente después de enviar esta respuesta. "Bueno, dale, ya te cambio el protocolo".
El protocolo debería cambiar sólo cuando implica una ventaja. Por ejemplo, cambiar a una nueva versión de HTTP da una ventaja sobre una vieja, y cambiar a un protocolo sincronizado en tiempo real puede ser ventajoso cuando se manejan recursos que funcionan mejor en esas condiciones.

102 Procesando
El Servidor le indica al cliente que recibió el pedido pero todavía está procesandolo, no tiene todavía una respuesta para darle. En otras palabras, "bancame que estoy pensando".

2 - 2xx: Mensajes que informan que el pedido fue procesado correctamente.

El Servidor le indica al cliente que la petición fue recibida correctamente, entendida y aceptada.

Mensajes:

200 OK
Respuesta estándar para peticiones correctas. "Dale, te hago el favor".

La respuesta que devuelve el servidor depende del pedido que le haya hecho el cliente. Por ejemplo:

Obtener (GET): Un objeto correspondiente al recurso pedido es enviado en la respuesta.

Encabezado (HEAD): Los campos correspondientes al objeto encabezado correspondiente al recurso solicitado es enviado en la respuesta. La respuesta no tiene cuerpo.

Enviar (POST): En la respuesta hay un objeto describiendo o conteniendo el resultado de una acción.

códigos

201 Creado
La petición ha sido completada y ha resultado en la creación de un nuevo recurso. Por ejemplo, cuando subimos una foto a un servidor y todo fue bien, recibimos este mensaje. La respuesta debería incluir la url del nuevo objeto o dónde encontrarlo.

202 Aceptada
La petición ha sido aceptada para procesamiento, pero este no ha sido completado. La petición eventualmente pudiere no ser satisfecha, ya que podría ser no permitida o prohibida cuando el procesamiento tenga lugar. "Entiendo lo que me pedís pero voy a pensar si lo hago".
La respuesta 202 es intencionalmente no comprometedora. Su propósito es permitir al server que acepter un pedido para otro proceso sin exigirle al cliente que la comunicación entre ellos persista hasta obtener la respuesta. El objeto devuelto con este estado debería incluir una indicación del estado de la solicitud o algún link a un monitor de estatus, o tiempo estimado hasta completar el pedido.

203 Información no autoritativa (desde HTTP/1.1)
La información devuelta en la respuesta no está disponible en el server original, pero está siendo buscada en una copia local o externa. "Lo tenía pero no lo encuentro, por suerte para vos, lo encontré en otro lado y lo estoy trayendo".

204 Sin contenido
Es una respuesta con el cuerpo vacío, pero, como pertenece a la familia de los 200, indica que la solicitud fue exitosa. Se devuelve cuando no es necesario dar detalles de la acción realizada. La respuesta puede incluir información nueva o actualizada en los encabezados.
La ventaja de esta respuesta es que la página que estabamos mirando no cambia.

205 Recargar contenido
El Servidor realizó exitosamente la tarea solicitada y le recomienda al cliente que actualice la página. Generalmente se manifiesta con un popup avisando que deberías actualizar la página, con un aceptar o un cancelar.

206 Contenido parcial
La petición servirá parcialmente el contenido solicitado. Esta característica es utilizada por herramientas de descarga como wget para continuar la transferencia de descargas anteriormente interrumpidas, o para dividir una descarga y procesar las partes simultáneamente.

solicitudes

207 Estado múltiple (Multi-Status, WebDAV)
El cuerpo del mensaje que sigue es un mensaje XML y puede contener algún número de códigos de respuesta separados, dependiendo de cuántas sub-peticiones sean hechas.

3 - 3xx: Redirecciones

El cliente tiene que tomar una acción adicional para completar la petición. La acción requerida puede ser llevada a cabo por el agente de usuario sin interacción con el usuario si y sólo si el método utilizado en la segunda petición es GET o HEAD. El agente de usuario no debe redirigir automáticamente una petición más de 5 veces, dado que tal funcionamiento indica usualmente un Bucle infinito.

Mensajes:

300 Múltiples opciones
Indica opciones múltiples para el URI que el cliente podría seguir, con información sobre cada una para que el browser pueda elegir la más apropiada.

HTTP para newbies y no tan newbies

301 Movido permanentemente
"La página estaba acá, pero no está más. No te preocupes que te estoy llevando a la nueva ubicación".
Cuando se recibe un 301 en una solicitud que no es GET ni HEAD, el browser debe consultar al cliente si se desea continuar; por ejemplo, cuando estás enviando un comentario a una página que fue movida permanentemente. El cliente debería actualizar sus bookmarks por la dirección nueva.

mensajes

302 Encontrado
El recurso solicitado reside temporalmente en una dirección (URI) diferente. Ya que la redirección es temporal, el cliente debería conservar la dirección original.

errores

303 Vea otra (desde HTTP/1.1)
La respuesta a la solicitud puede ser encontrada en otra dirección y debería ser solicitada utilizando GET. Este método existe principalmente para permitir a los usuarios que utilizaron POST para realizar una solicitud puedan ser redirigidos a un recurso seleccionado.

http
Schrödinger's cat

304 No modificado
Indica que la petición a la URL no ha sido modificada desde que fue requerida por última vez. Típicamente, el cliente HTTP provee un encabezado como If-Modified-Since para indicar una fecha y hora contra la cual el servidor pueda comparar. El uso de este encabezado ahorra ancho de banda y reprocesamiento tanto del servidor como del cliente.

305 Utilice un proxy (desde HTTP/1.1)
El recurso solicitado debe ser accedido a través de un proxy, dado en el campo Location. Se espera que el cliente repita esta solicitud usando el proxy.
Muchos clientes HTTP (como Mozilla2 e Internet Explorer) no se apegan al estándar al procesar respuestas con este código, principalmente por motivos de seguridad.

306 Cambie de proxy
Esta respuesta está fuera de uso.

307 Redirección temporal (desde HTTP/1.1)
Se trata de una redirección que debería haber sido hecha con otra URI, sin embargo aún puede ser procesada con la URI proporcionada. Como la dirección puede cambiar ocasionalmente, el cliente debería conservar la dirección original.
En contraste con el código 303, el método de la petición no debería ser cambiado cuando el cliente repita la solicitud. Por ejemplo, una solicitud POST tiene que ser repetida utilizando otra petición POST.

respuestas

4 - 4xx Errores del cliente

La intención de la clase de códigos de respuesta 4xx es para casos en los cuales el cliente parece haber errado la petición. Excepto cuando se responde a una petición HEAD, el servidor debe incluir una entidad que contenga una explicación a la situación de error, y si es una condición temporal o permanente. Estos códigos de estado son aplicables a cualquier método de solicitud (como GET o POST). Los agentes de usuario deben desplegar cualquier entidad al usuario. Estos son típicamente los códigos de respuesta de error más comúnmente encontrados.

400 Solicitud incorrecta
La solicitud contiene sintaxis errónea y no debería repetirse.

401 No autorizado
La solicitud necesita ingresar usuario/password antes de continuar. La respuesta debe incluir un encabezado pidiendo datos de autorización. El cliente puede repetir la solicitud con el campo de Autorización del encabezado correspondiente. Si el pedido incluye las credenciales, la respuesta incluye que las mismas son no válidas.

códigos

402 Pago requerido
La intención original era que este código pudiese ser usado como parte de alguna forma o esquema de Dinero electrónico o micropagos, pero eso no sucedió, y este código nunca se utilizó.

solicitudes

403 Prohibido
La solicitud fue legal, pero el servidor se rehúsa a responderla. En contraste a una respuesta 401 No autorizado, la autentificación no haría la diferencia. El mensaje debería incluir las razones por las cuales esto sucede.

HTTP para newbies y no tan newbies

404 No encontrado
Recurso no encontrado. Se utiliza cuando el servidor web no encuentra la página o recurso solicitado.

mensajes

405 Método no permitido
Una petición fue hecha a una dirección utilizando un método de solicitud no soportado por dicha dirección; por ejemplo, cuando se utiliza GET en una forma que requiere que los datos sean presentados vía POST, o utilizando PUT en un recurso de sólo lectura.

errores

406 No aceptable
El servidor no puede dar una respuesta que cumpla con todos los requisitos que el cliente pide en su solicitud.

http

407 Autenticación Proxy requerida

408 Tiempo de espera agotado
El cliente tardó en contestar más que lo que el servidor estaba dispuesto a esperar.

respuestas

409 Conflicto
La solicitud no pudo ser completada debido a un conflicto con el estado actual del recurso. Este código sólo es permitido en situaciones donde es esperable que el usuario pueda resolver el conflicto y reenviar el pedido. El cuerpo de la respuesta debería incluir información suficiente para que el usuario pueda reconocer el origen del conflicto.

códigos

410 Ya no disponible
Indica que el recurso solicitado ya no está disponible y no lo estará de nuevo. Este código debería ser utilizado cuando un recurso haya sido quitado intencionalmente; sin embargo, en la práctica, un código 404 No encontrado es expedido en su lugar.

solicitudes

411 Requiere longitud
El servidor se niega a aceptar el pedido sin un campo Content-Length definido. El cliente puede repetir el pedido si agrega un valor válido al campo del encabezado Content-Length, conteniendo la longitud del cuerpo del mensaje.

412 Falló precondición
Una precondición dada en uno o más campos del encabezado del pedido ha sido evaluado como falso cuando ha sido probado en el server.

413 Solicitud demasiado larga
El servidor se niega a aceptar el pedido porque el mensaje es demasiado largo.

HTTP para newbies y no tan newbies

414 URI demasiado larga
El servidor se niega a aceptar el pedido porque la dirección solicitada es demasiado larga.

mensajes

415 Tipo de medio no soportado
El servidor se niega a aceptar el pedido porque el pedido está en un formato no soportado por el recurso pedido para el método solicitado.

416 Rango solicitado no disponible
El cliente ha preguntado por una parte de un archivo, pero el servidor no puede proporcionar esa parte, por ejemplo, si el cliente preguntó por una parte de un archivo que está más allá de los límites del fin del archivo.

errores

417 Falló expectativa
La condición dada en el campo Expect del encabezado no puede ser cumplida por el servidor.

http

421 Hay muchas conexiones desde esta dirección de internet

422 Entidad no procesable (WebDAV - RFC 4918)
La solicitud está bien formada pero fue imposible seguirla debido a errores semánticos.

respuestas

423 Bloqueado (WebDAV - RFC 4918)
El recurso al que se está queriendo acceso está bloqueado.

códigos

424 Falló dependencia (WebDAV) (RFC 4918)
La solicitud falló debido a una falla en la solicitud previa.

solicitudes

426 Actualización requerida (RFC 2817)
El cliente debería cambiarse a TLS/1.0.

HTTP para newbies y no tan newbies

5 - 5xx Errores de servidor

Los códigos de respuesta que comienzan con el dígito "5" indican casos en los cuales el servidor tiene registrado aún antes de servir la solicitud, que está errado o es incapaz de ejecutar la petición. Excepto cuando está respondiendo a un método HEAD, el servidor debe incluir una entidad que contenga una explicación de la situación de error, y si es una condición temporal o permanente. Los agentes de usuario deben desplegar cualquier entidad incluida al usuario. Estos códigos de repuesta son aplicables a cualquier método de petición.

500 Error interno
Es un código comúnmente emitido por aplicaciones empotradas en servidores web, mismas que generan contenido dinámicamente, por ejemplo aplicaciones montadas en IIS o Tomcat, cuando se encuentran con situaciones de error ajenas a la naturaleza del servidor web. En otras palabras, algo anda mal en el servidor.

mensajes


501 No implementado
El servidor no soporta la funcionalidad requerida para completar este pedido. Esta es la respuesta apropiada cuando el servidor no reconoce el metodo del pedido y no es capaz de soportarlo para ningún recurso.

502 Pasarela incorrecta
El servidor, mientras actuaba como pasarela (gateway) o proxy, recibió una respuesta inválida del server que contactó mientras intentaba procesar el pedido.

errores

503 Servicio no disponible
El servidor no puede atender el pedido debido a una sobrecarga temporal o un mantenimiento aplicado al servidor. La implicación es que es una condición temporaria que puede aliviarse después de una demora.

504 Tiempo de espera de la pasarela agotado
El servidor, mientras actuaba como pasarela o proxy, no recibió una respuesta rápida del servidor que contactó mientras intentaba procesar el pedido.

505 Versión de HTTP no soportada
El servidor no soporta la versión HTTP asociada al pedido.

507 Almacenamiento insuficiente (WebDAV - RFC 4918)
El servidor no tiene espacio suficiente para aceptar el pedido.

http

508 - Loop detectado
El pedido fue redireccionado a una dirección que a su vez redirecciona a otra, entrando en un loop infinito.

respuestas

509 Límite de ancho de banda excedido
Este código de estatus, mientras que es utilizado por muchos servidores, no es oficial.


# Fin del Cuerpo

# Postdata


Y con esto damos por terminada la repasada a HTTP.

Para encontrar más información, pueden consultar los links en la fuente.

Las fotos de los gatitos son los HTTP Status Cat, pueden encontrar la galería en la fuente, que incluye otros estados como 418 - Soy una tetera.

# Fin de la Postdata

Anuncios

13 comentarios - HTTP para newbies y no tan newbies

Samplezt
excelnte post hermano, te ganaste mis 10, se nota el laburo
craftmanJr
Samplezt dijo:excelnte post hermanA, te ganaste mis 10, se nota el laburo


Me quedé sin puntos, mañana van 10.
Reco y a favoritos
faziten
uuuuuuuh me gustó... me lo voy a leer al ñoba

gracias !
diegox_super
y para que llegue a lo que es son millones de codigos xD
prueba apretando boton derecho en la pagina y pon

Ver codigo fuente de la pagina
renovatto_fenix
cats cats everywhere

A favs para releer con calma
K4h13
a favoritos
Kenthok
+10 a favs y reco, tengo mucho interés en el tema, mañana lo leo tranquilo
hunter_killer
muy peola, el 402 no lo tenia, si abre renegado enviando paquetes a mano
craftmanJr
10 puntos como prometí. Ahora que me libere de las clases, voy a leerlo con calma