HTTP #7 – Los métodos seguros e inseguros

Protocolo HTTP

Algunos de métodos se pueden considerar seguros, en cambio otros son inseguros.

Los método seguros no realizan acciones como borrar un recurso, cambiar el numero de una tarjeta de crédito o cancelar la cuenta de un usuario.

El método GET es considerado seguro ya que simplemente obtiene un recurso, no lo modifica ni elimina. Si tenemos una URL hacia una imagen JPG, el servidor nos devuelve un JPG que se muestra en el navegador, y ya está, nada más. No se puede borrar la imagen del servidor ni editarla de ninguna manera.

En cambio el método POST no es seguro. Una petición POST normalmente cambia algo en el servidor (actualiza una cuenta, envía una compra). Los navegadores tratan las peticiones GET y POST de forma diferente ya que GET es seguro y POST es inseguro. Un problema en los envíos de formularios por el método GET es que la información viaja a través de la URL y  puede ser robada fácilmente, así que, aunque de otra forma, también se puede considerar inseguro. 🙂

Cuando intentamos refrescar una pagina web que ha sido obtenida por el método GET el navegador no pone ninguna pega en volver a realizar la petición GET, volver a recargar la respuesta y mostrar el recurso. Sin embargo, si la pagina que estamos buscando es una respuesta directa a una petición POST, el navegador nos lanza un aviso de si realmente queremos refrescar o no la pagina.

Texto mostrado por una recarga post

Debido a avisos como éstos, muchas aplicaciones web tratan los datos de una petición POST y después redirigen diciéndole al navegador que obtenga otro recurso. El navegador lanza una petición GET hacia una página en donde el servidor responde con algo como “Gracias por su compra“. Si el usuario refresca esta última página no hay ningún problema. Esto es un patrón web conocido como POST / Redirect / GET.

 Lo TÍPICO del GET:

<a href="http://validator.w3.org/">Validador W3C</a>

Cuando el usuario haga click en el anterior link, el navegador realizara una petición GET a la URL indicada en el atributo href. La request tendrá el siguiente aspecto:

GET http://www.w3c.org/validator.w3.org/
Host: w3c.org

Lo TÍPICO del POST

<form action="/cuenta/crear" method="post">
  <label for="nombreUsuario">Nombre: </label>
  <input type="text" name="nombreUsuario" id="nombreUsuario">
  <label for="apellidoUsuario">Nombre: </label>
  <input type="text" name="apellidoUsuario" id="apellidoUsuario">
  <button type="submit">Registrarse</button>
</form>

Cuando el usuario pulse el botón de Registrarse el navegador sabe que el botón está dentro de un form. El formulario indica que el método a utilizar es POST. La petición que realizará será algo así:

POST http://www.redsocial.com/cuenta/crear HTTP/1.1
Host: redsocial.com
nombreUsuario=Aitor&apellidoUsuario=Alejandro

Como se ve, los inputs están incluidos en el mensaje HTTP.  (no viajan en la URL). Le toca a la aplicación recoger esos parámetros y crear una cuenta (siguiendo con el ejemplo). Las respuestas más comunes a la anterior petición serían:

  • Responder con un HTML diciendo que la cuenta ha sido creada. Haciendo esto dejamos al usuario viendo el resultado de una petición POST. Si refresca la pagina puede que acabe volviendo a enviar el mismo formulario otra vez (ver aviso de arriba).
  • Responder con un redirect que haga que el navegador lance una petición GET a una página que indique que la cuenta ha sido creada.
  • Si el proceso no se puede realizar, responder con un redirect a una pagina de error.
HTTP #7 – Los métodos seguros e inseguros

2 comentarios en “HTTP #7 – Los métodos seguros e inseguros

  1. […] 302 — Moved Temporarily — El recurso ha cambiado a la URL especificada en la cabecera Location. En el futuro, el cliente podrá realizar la petición a la URL original porque se ha cambiado temporalmente. Este status es típicamente usada después de un POST de un formulario para llevar al cliente a un recurso que se pueda pedir con GET (ver capítulo 7) […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s