7 min de lectura

HTTP contiene un grupo de peticiones HTTP (también llamadas HTTP verbs por, el tipo de nombre que manejan casi todos ellos -pues si bien algunos son sustantivos, la gran mayoría no-) que nos ayudan a especificar la acción que se requiere realizar en un elemento determinado y aunque estas peticiones tienen distintas semánticas, también tienen muchas similitudes en las mismas que evitan que este grupo se extienda demasiado.

Clasificación de las peticiones HTTP

Estas peticiones las podemos clasificar en Safe e Idempotent:

Peticiones HTTP Safe

Un método HTTP es considerado safe o seguro si no altera el estado del servidor. En otras palabras, un método es seguro si conduce a una operación de ‘sólo lectura’. Algunos de los métodos HTTP más comunes son seguros: OPTIONS, GET o HEAD. Todos los métodos seguros son también a su vez idempotent (así como también algunos, pero no todos, los métodos inseguros como DELETE o PUT).

Incluso si los métodos seguro tienen una semántica de sólo lectura, los servidores pueden alterar su estado, como por ejemplo: pueden registrar o mantener estadísticas. Lo importante es que de esta forma los usuarios pueden hacer uso de los métodos seguros sin preocuparse de que se realicen cambios en el servidor o de crearle cargas innecesarias a este último. Es por ello también que los navegadores hacen uso de estos métodos al realizar operaciones tales como la de anticiparse a otras operaciones (pre-fetching) sin temor a causar algún problema o riesgo.

Peticiones HTTP Idempotent

Así como un objeto cualquiera tiene la propiedad de idempotencia si al realizar una operación muchas veces da el mismo resultado cual si se hubiese realizado la operación una sola vez, un método HTTP es idempotente si una solicitud idéntica puede realizarse una o demasiadas veces consecutivamente obteniendo el mismo resultado dejando al servidor en el mismo estado.

En la vida y en los números reales, podríamos llamar al 1 y al 0 como los únicos idempotentes para la operación de multiplicación, pues estos números al multiplicarse en muchas ocasiones, da como resultado él mismo (1^n = 1). Volviendo a HTTP, los métodos que (implementados correctamente) son idempotentes son el GET, HEAD, PUT y DELETE y como lo explicamos en los métodos Safe, todos éstos últimos son idempotentes.

GET /index.html HTTP/1.2 es idempotente, pues si lo llamamos el cualquier número de ocasiones de forma consecutiva, el cliente recibirá el mismo resultado:

Listado de peticiones HTTP

  • Get
  • Options
  • Head
  • Put
  • Post
  • Delete
  • Connect
  • Trace

Peticiones HTTP: GET

El método GET significa recuperar cualquier información (en forma de una entidad) identificada por el Request-URI. Si el Request-URI se refiere a un proceso de producción de datos, son los datos producidos los que se devolverán como entidad en la respuesta y no el texto fuente del proceso. Cabe señalar que todas las peticiones que usan el método GET, deberán recuperar únicamente datos.

Ejemplo:

A lo que el servidor respondería algo parecido a:

Peticiones HTTP: OPTIONS

El método OPTIONS representa una solicitud de información acerca de las opciones de comunicación disponibles en el canal de solicitud/respuesta identificada por el Request-URI. En otras palabras, éste método es el que utilizamos para describir las opciones de comunicación existentes de un recurso destino. Dato: El cliente como tal puede especificar una URL para este método o, en su lugar, utilizar un asterisco para referirse al servidor completo.

Ejemplo: 

Se necesita saber cuáles métodos de solicitud soporta el servidor de nuestra profesora, podemos utilizar curl y una solicitud OPTIONS:

Para lo cual el servidor podría contestar algo como lo siguiente:

Peticiones HTTP: HEAD

El método HEAD es muy similar al GET (funcionalmente hablando), a excepción de que el servidor responde con líneas y headers, pero no con el body de la respuesta.

Ejemplo:

A lo que el servidor nos respondería algo como:

Peticiones HTTP: PUT

El método PUT es usado para solicitar que el servidor almacene el cuerpo de la entidad en una ubicación específica dada por el URL.

Ejemplo:

Se solicita al servidor que guarde el cuerpo de la entidad dada en index.htm en la raíz del servidor:

Y el servidor por su parte, responde con lo siguiente al cliente (habiendo ya guardado el cuerpo de la entidad en el archivo index.htm):

Peticiones HTTP: POST

El método POST es usado cuando se requiere enviar información al servidor como, por ejemplo, un archivo de actualización, información de formulario, etc. En otras palabras, éste método se usa cuando se necesita enviar una entidad para algún recurso determinado. La diferencia entre PUT y POST es que PUT es idempotente, mientras que si realizamos repetidas idénticas peticiones con el método POST, podría haber efectos adicionales como pasar una orden varias ocasiones.

Ejemplo: Se enviará información de formulario al servidor, que será procesada por un process.cgi:

Peticiones HTTP: DELETE

Este método es utilizado para solicitar al servidor que elimine un archivo en una ubicación específica dada por la URL. En otras palabras más simples, este método elimina un recurso determinado.

Ejemplo: Se le solicitará al servidor eliminar el archivo hello.htm en la ruta raíz del servidor:

El servidor por su parte responderá eliminando dicho archivo y respondiendo al cliente lo siguiente:

Peticiones HTTP: CONNECT

Este método por su parte es usado por el cliente para establecer una conexión de red con un servidor web mediante HTTP misma que se establece en forma de un túnel.

Ejemplo: Se quiere establecer conexión con un servidor corriendo en yosoy.dev:

Una vez establecida la conexión, se regresa al cliente una respuesta similar a:

Peticiones HTTP: TRACE

Éste método se utiliza para realizar pruebas de eco (de retornos) de mensajes en el camino que existe hacia un recurso determinado. Es un método muy utilizado para la depuración y también para el desarrollo.

Ejemplo:

Utilizando este método como se muestra en la parte anterior, obtendríamos una respuesta del servidor como la siguiente:

3 COMENTARIOS

  1. Hola,

    Creo que en el ejemplo de DELETE el archvo que está borrando en realidad es “/hello.htm” y no “index.htm” ¿Es correcto?

    Gracias, saludos!

  2. Oye porque no haces Peticion HTTP apache igual como lo hiciste con esos ejemplos por favor hazlo amigo yo compartiré tu pagina respondeme amigo

Deja tus comentarios

This site uses Akismet to reduce spam. Learn how your comment data is processed.