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:
1 2 3 4 |
GET /index.html HTTP/1.1 GET /index.html HTTP/1.1 GET /index.html HTTP/1.1 GET /index.html HTTP/1.1 |
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:
1 2 3 4 5 6 |
GET /index.html HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.yosoy.dev Accept-Language: es-mx Accept-Encoding: gzip, deflate Connection: Keep-Alive |
A lo que el servidor respondería algo parecido a:
1 2 3 4 5 6 7 8 9 10 11 |
Ejemplo respuesta del servidor: HTTP/1.1 200 OK Date: Wed, 08 Nov 2017 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Mon, 22 Jul 2014 19:15:56 GMT ETag: "34aa387-d-1568eb00" Vary: Authorization,Accept Accept-Ranges: bytes Content-Length: 88 Content-Type: text/html Connection: Closed |
1 2 3 4 5 |
<html> <body> <h1>Howdy, Michelle!</h1> </body> </html> |
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:
1 |
curl -X OPTIONS https://yosoy.dev -i |
Para lo cual el servidor podría contestar algo como lo siguiente:
1 2 3 4 5 |
HTTP/1.1 200 OK Date: Wed, 8 Nov 2017 12:28:53 GMT Server: Apache/2.2.14 (Win32) Allow: GET,HEAD,POST,OPTIONS,TRACE Content-Type: httpd/unix-directory |
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:
1 2 3 4 5 6 |
GET /index.html HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.yosoy.dev Accept-Language: es-mx Accept-Encoding: gzip, deflate Connection: Keep-Alive |
A lo que el servidor nos respondería algo como:
1 2 3 4 5 6 7 8 9 10 |
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Vary: Authorization,Accept Accept-Ranges: bytes Content-Length: 88 Content-Type: text/html Connection: Closed |
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:
1 2 3 4 5 6 7 |
PUT /index.htm HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.yosoy.dev Accept-Language: es-mx Connection: Keep-Alive Content-type: text/html Content-Length: 182 |
1 2 3 4 5 |
<html> <body> <h1>Howdy, Michelle!</h1> </body> </html> |
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):
1 2 3 4 5 6 |
HTTP/1.1 201 Created Date: Mon, 27 Nov 2017 12:28:53 GMT Server: Apache/2.2.14 (Win32) Content-type: text/html Content-length: 30 Connection: Closed |
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:
1 2 3 4 5 6 7 8 |
POST /cgi-bin/process.cgi HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.yosoy.dev Content-Type: text/xml; charset=utf-8 Content-Length: 88 Accept-Language: es-mx Accept-Encoding: gzip, deflate Connection: Keep-Alive |
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:
1 2 3 4 5 |
DELETE /hello.htm HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.yosoy.dev Accept-Language: es-mx Connection: Keep-Alive |
El servidor por su parte responderá eliminando dicho archivo y respondiendo al cliente lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 |
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Content-type: text/html Content-length: 30 Connection: Closed <html> <body> <h1>URL deleted.</h1> </body> |
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:
1 2 |
CONNECT www.yosoy.dev HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) |
Una vez establecida la conexión, se regresa al cliente una respuesta similar a:
1 2 3 |
HTTP/1.1 200 Connection established Date: Mon, 27 Nov 2017 02:22:53 GMT Server: Apache/2.2.14 (Win32) |
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:
1 2 3 |
TRACE / HTTP/1.1 Host: www.yosoy.dev User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) |
Utilizando este método como se muestra en la parte anterior, obtendríamos una respuesta del servidor como la siguiente:
1 2 3 4 5 6 7 8 9 10 |
HTTP/1.1 200 OK Date: Mon, 27 Nov 2017 12:28:53 GMT Server: Apache/2.2.14 (Win32) Connection: close Content-Type: message/http Content-Length: 39 TRACE / HTTP/1.1 Host: www.yosoy.dev User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) |
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!
Tienes razón.
Gracias por el dato, ya quedó corregido.
Oye porque no haces Peticion HTTP apache igual como lo hiciste con esos ejemplos por favor hazlo amigo yo compartiré tu pagina respondeme amigo