Protocolo HTTP para desarrolladores (parte II)
Y llegamos a la segunda parte del tutorial o guía sobre conceptos básicos que un desarrollador debería saber sobre el protocolo HTTP parte II. En esta segunda parte hablaremos de los verbos de una petición HTTP y hablaremos sobre los códigos de estado de una respuesta HTTP.
Verbos de una petición HTTP.
Este apartado también se podría titular como los diferentes tipos de peticiones HTTP, ya que se suelen identificar por el tipo de verbo empleado. Los verbos HTTP especifican la acción que se debe llevar a cabo en un host. Por ejemplo si queremos que el servidor nos muestre una página HTML (un index.html por ejemplo) el verbo HTTP más adecuado es GET. Muchos autores para referirse al verbo GET hablan de este diciendo “que se hace una petición GET”.
Si recuerdas cuando hablábamos de los encabezados de petición en la primera parte de este tutorial, uno de los encabezados de petición que salía en una imagen era:
GET / HTTP/1.1 Host: www.google.es Connection: keep-alive
Como podemos ver aparece el verbo GET en el encabezado de petición, es decir, los verbos se especifican en los encabezados de una petición HTTP y definen la forma en la que vamos a interactuar con el servidor.
Hasta ahora hemos visto para que sirven los verbos (definen la forma de interactuar con el servidor) y donde los podemos encontrar (en los encabezados de las peticiones HTTP), así que ahora pasamos a analizar y mostrar los diferentes tipos de verbos.
Tipos de verbos HTTP (según el RFC2616)
- GET: obtiene el recurso especificado por la URL. La URL contiene toda la información necesaria para localizar y obtener el recurso.
- POST: envía o somete datos para que sean procesados por el recurso identificado en la URL. Generalmente los datos que se envían se especifican en el cuerpo de la petición. El ejemplo más habitual es cuando subimos una imagen a un servidor a través del navegador ya que el verbo empleado es POST y los datos binarios de la imagen se especifican en el cuerpo de la petición.
- PUT: sube o actualiza un recurso especificado. Es la forma más eficiente de subir archivos a un servidor, pero está en desuso porque la mayoría de las empresas de hosting tienen deshabilitado este verbo, por eso se ha generalizado el uso del verbo POST a la hora de subir archivos.
- DELETE: Borra el recurso especificado.
- HEAD: Obtiene sólo las cabeceras de una petición. Es un verbo similar a GET, sólo que GET además de las cabeceras también obtiene el cuerpo de la respuesta.
- TRACE: este método se emplea con fines de diagnóstico ya que solicita al servidor que envíe todos los datos de la solicitud enviada.
- OPTIONS: sirve para obtener una lista de los métodos HTTP que soporta el servidor (dicho de otra manera, nos informa sobre los verbos que soporta el servidor).
- CONNECT: se utiliza para saber si tenemos acceso a un determinado host.
Tipos de códigos de estado de una respuesta HTTP (según el RFC2616)
Con una URL y los verbos, un cliente puede realizar una petición HTTP a un servidor. A esta petición el servidor responde con un código de estado. En este apartado veremos los diferentes códigos de estado de una respuesta HTTP. Estos códigos de respuesta no hace falta saberlos todos de memoria, con saber lo que significa cada serie es suficiente (por ejemplo la 2xx operación exitosa, la 4xx error, etc..) y después tener a mano la lista para su consulta es suficiente.
- 1xx: Mensajes de información.
- 100 – 101 Conexión rechazada.
- 2xx: Mensajes de operación exitosa.
- 200 OK
- 201-203 Información no oficial
- 204 Sin Contenido
- 205 Contenido para recargar
- 206 Contenido parcial
- 3xx: Código de redirección.
- 301 Mudado permanentemente
- 302 Encontrado
- 303 Vea otros
- 304 No modificado
- 305 Utilice un proxy
- 307 Redirección temporal
- 4xx: Error por parte del cliente.
- 400 Solicitud incorrecta
- 401 No autorizado
- 402 Pago requerido
- 403 Prohibido
- 404 No encontrado
- 409 Conflicto
- 410 Ya no disponible
- 412 Falló precondición
- 5xx: Error del servidor.
- 500 Error interno
- 501 No implementado
- 502 Pasarela incorrecta
- 503 Servicio no disponible
- 504 Tiempo de espera de la pasarela agotado
- 505 Versión de HTTP no soportada
Si habéis llegado hasta aquí entendiendo todos los apartados de la guía, ya tenéis el nivel suficiente para leer el apartado de la Wikipedia correspondiente al protocolo HTTP que os ayudará a afianzar conocimientos.
Falta una tercera parte de la guía en la que entraremos de lleno en los diálogos HTTP (petición – respuesta) y que mostrarán como se aplica todo lo comentado hasta ahora.
Taller del protocolo HTTP para desarrolladores (parte II)
Con el fin de afianzar conocimientos y de ver aplicaciones prácticas (con código PHP mayormente), proponemos el siguiente taller para facilitaros la tarea de practicar.
Código que nos permite agregar una línea al encabezado de respuesta del servidor.
Este código ya lo propusimos en el taller de la primera parte, pero ahora que conocemos los códigos de respuesta de la serie 3xx (redirección) entenderemos mejor lo que hace el código propuesto:
<?php header ('HTTP/1.1 301 Moved Permanently'); header ('Location: http://www.google.es'); ?>
Podemos ver que envía el código de estado 301 para establecer una redirección permanete a la página de Google.es
Código para trabajar con la query de una URL (si no recuerdas lo que es la query puedes leerlo en la parte I de la guía, aquí te espero) y el verbo GET.
El código toma las variables nombre y apellidos a través de la query de la URL y trabaja con ellas a nivel PHP.
<?php //Definimos el salto de linea HTML para mostrar los datos en el navegador $salto_de_linea_html = "</br>"; //Trabajamos con la variable nombre obtenida a traves de la query con el método GET if ( isset($_GET["nombre"]) ) { $nombre = $_GET["nombre"]; echo "Nombre: " . $nombre . $salto_de_linea_html; } else { echo "No esta especificada la variable nombre en la URL" . $salto_de_linea_html ; } //Trabajamos con la variable apellido obtenida a traves de la query con el método GET if ( isset($_GET["apellido"]) ) { $apellido = $_GET["apellido"]; echo "Apellido: " . $apellido . $salto_de_linea_html; } else { echo "No esta especificada la variable apellido en la URL" . $salto_de_linea_html; } ?>
Podemos probar las siguientes queries con el código:
http://localhost/test.php?nombre=Juan&apellido=Rodriguez
http://localhost/test.php?apellido=Rodriguez
http://localhost/test.php?nombre=Juan
http://localhost/test.php?nombre&apellido
Como siempre, os animo a que dejéis comentarios o dudas, con mucho gusto las responderé.