Anda di halaman 1dari 5

Mtodos GET vs POST del HTTP

Entendiendo el concepto de GET y POST


Muchas veces tenemos una idea equivocada sobre la utilizacin de GET y
POST. Tendemos a entender que cuando doy click a un link eso es GET y
cuando envo un formulario es POST. Mucho peor, solemos pensar que
enviando peticiones POST los datos viajan seguros por no ir como parte de
la URL como lo hace GET. Hay un error en este concepto que considero
que cuando empezamos a aprender a usar tecnologas Web como por
ejemplo PHP es entendible pero que a medida que vamos madurando
debemos darnos cuenta que GET y POST no son la diferencia entre links y
formularios.
Se suele prestar a confusin ya que tanto GET como POST son mtodos del
protocolo HTTP el cual esta compuesto por un envo al servidor conocido
como peticin (request) y una respuesta a dicha solicitud (response).

Tanto GET como POST, justamente por ser mtodos ambos de HTTP,
ejecutan un request y response, y a mi criterio esto suele ser parte de la
confusin sobre los objetivos reales de ambos mtodos.

Redefinamos los conceptos


El concepto GET es obtener informacin del servidor. Traer datos que
estn en el servidor, ya sea en un archivo o base de datos, al cliente.
Independientemente de que para eso tengamos que enviar (request) algn
dato que ser procesado para luego devolver la respuesta (response) que
esperamos, como por ejemplo un identificador para obtener una noticia de
la base de datos.
POST sin embargo es enviar informacin desde el cliente para que sea
procesada y actualice o agregue informacin en el servidor, como sera la
carga o actualizacin en s de una noticia. Cuando enviamos (request) datos
a travs de un formulario, estos son procesados y luego a travs de una
redireccin por ejemplo devolvemos (response) alguna pgina con
informacin.
Ambos mtodos solicitan una respuesta del servidor y ah es donde parecen
que los conceptos son iguales ya que con ambos se podra lograr los
mismos objetivos. Yo podra, aunque estara mal, enviar por GET ciertos
datos en la URL y actualizar o insertar informacin en mi base de datos,
pero eso le correspondera al mtodo POST. De la misma manera podra
solicitar una pgina diferente por medio de POST y simplemente mostrarla
como respuesta aunque eso debera ser a travs de una llamada GET.

Las llamadas GET pueden ser cacheadas (historial del navegador),


indexadas por buscadores, agregar los enlaces a nuestros favoritos o hasta
pasar una url completa a otra persona para que directamente ingrese a esa
pgina. Con el mtodo POST sin embargo no se puede hacer esto.
Generalmente usamos links para ejecutar llamadas GET ya que la idea del
link es simplemente solicitar una informacin (pgina) al servidor y que
sea devuelta como una respuesta. Mientras usamos formularios para
actualizar datos de productos, clientes, noticias, etc, tambin teniendo en
cuenta que por el mtodo POST tambin se puede enviar mucha ms
cantidad de datos que por GET.
Para entender finalmente la diferencia voy a darles un caso de anlisis.
Supongamos que tenemos en nuestro sitio ecommerce un listado de
productos con un link que agregue ese producto al carrito de compras. Si
hacemos que ese link ejecute el mtodo GET, como generalmente lo
usamos, usaramos una URL parecida a esta:
www.misitio.com/agregar_item_carrito.php?id=1. Al ser una llamada GET,
Google podra indexar esa URL y podra aparecer en el buscador al buscar
la palabra carrito. Cuando una persona le diera click automticamente se
ejecutara esa pgina y agregara el item con id 1 al carrito del sitio, lo cual
les puedo asegurar que no es la idea ya que el visitante al buscar carrito
debera querer simplemente entrar al sitio y no agregar un tem que ni
siquiera sabe cual es. Por lo tanto vemos que para este caso, por ms que
usemos un link, deberamos de usar una llamada al mtodo POST por
ejemplo como lo usa el framework Symfony as:

1
2
3

<a onclick="f = document.createElement('form'); document.body.appendChild(f);


f.method = 'POST'; f.action = this.href; f.submit();return false;"
href="agregar_item_carrito.php?id=1">Agregar al carrito</a>

Lo que hace este link es muy sencillo, por medio del evento onclick de
JavaScript, crea dinmicamente un formulario, le dice que ser POST (ya
que por defecto sera GET), le asigna la URL del enlace al action del form,
enva el formulario y retorna false para no ejecutar el link en s. Para hacer
esto con Symfony simplemente usamos el helper link_to agregando la
opcin post=true:
?

<?php echo link_to('Agregar al carrito', 'agregar_item_carrito.php?id=1', 'post=true

Otro ejemplo sencillo sera cuando en un administrador de noticias tenemos


un listado de las noticias con un link eliminar para borrarlas una por una
(situacin muy comn en sistemas Web). Deberamos de hacer esta peticin
usando POST para no permitir, por seguridad, que esa URL creada sea
indexada, enviada a otra persona, guardada en favoritos, ni mucho menos
ejecutada por culpa del botn atrs del navegador ya que quedara cacheada
en el historial.
Demos un ejemplo opuesto. Hay casos en los que los formularios de
bsquedas al ser enviados por POST van a la pgina de resultados pero
como estas llamadas no son cacheadas en el historial del navegador, no
podemos volver usando la tecla atrs del navegador por lo que se suele
dejar como llamadas GET a fin de ser cacheadas. Esto lo hacemos
simplemente poniendo en el method del form la palabra get en lugar de
post.

Espero que con esto se haya entendido la diferencia real entre los mtodos
GET y POST del protocolo HTTP y que cuando vayamos a utilizar un link
o un formulario nos detengamos a pensar dos veces cual mtodo es el ms
apropiado para no arriesgar la seguridad ni la consistencia del sitio.
Este es un artculo interesante para continuar con este tema.
En el siguiente artculo vamos a hablar sobre la forma de utilizar estos dos
mtodos con Ajax y jQuery.

Anda mungkin juga menyukai