HTTP State Management Mechanism
Este Request For Comments (RFC) define las cookies, sus campos de cabecera y el proceso que hacen. A grandes rasgos las cookies son información enviada por un sitio web, las cuales son almacenadas en el navegador del usuario del sitio, para que el sitio web pueda al consultar dicha información para notificar al sitio de la actividad previa del usuario.
Utilizando los campos de cabecera de las cookies, un servidor http puede enviar en pares nombre/valor y metadatos a un cliente (por ejemplo un navegador web). El cliente utiliza esta información para determinar si debe enviar de nuevo los pares de nombre/valor; y con esto también conoce la actividad reciente del usuario.
Aunque parece algo muy simple, este proceso tiene algunas pequeñas complejidades, como por ejemplo indicar el alcance que tendrá cada cookie, dicho alcance indica el tiempo máximo que debe esperar el servidor para recibir respuesta del cliente, el servidor al que va dirigido y el esquema URI.
Como ya se conoce las cookies no son muy seguras, ya que terceros pueden extraer información aunque la conexión sea establecida como segura.
Para almacenar un estado, el servidor de origen incluye un encabezado Set-Cookie HTTP de respuesta, el cual también se utiliza para enviar las cookies desde el servidor a la aplicación del usuario.El cliente las almacena junto con todos sus atributos y en las siguientes peticiones, el cliente devuelve en el encabezado de la solicitud la cookie que recibió previamente, y que aún no haya expirado.
Si el cliente recibe una nueva cookie con el mismo nombre, mismo dominio y la misma ruta de alguna ya existente; la cookie es reemplazada por la nueva.
La sintaxis de este encabezado son que debe contener el nombre "Set-Cookie", seguido por ":" y una cookie. Cada cookie comienza con un nombre y un valor, seguido por un cero o más atributos.
El servidor envía como cookie un pequeño string en el identificador de sesión conocido como SID en la respuesta http, este es un pequeño ejemplo para comprender este pequeño proceso:
Servidor -> Cliente
Set-Cookie: SID=31d4d96e407aad42
Cliente -> Servidor
Cookie: SID=31d4d96e407aad42
Este identificador se sesión sería enviado en peticiones futuras al mismo servidor.
Los servidores no deben combinar múltiples encabezados en un solo encabezado ya que esto causaría problemas. Al igual que si un servidor envía múltiples respuestas cada una con distintos encabezados Set-Cookie, cada respuesta entran en una carrera que puede provocar un comportamiento extraño.
Dentro de este encabezado se pueden incluir múltiples atributos para indicarle al cliente diversas características de la cookie que está utilizando.
Atributos
Path y Domain
Con estos atributos el servidor indica al cliente que debe utilizar el identificador en cada ruta y subdominio del sitio web. Por ejemplo:
Cliente -> Servidor
Cookie: SID=31d4d96e407aad42
El atributo Domain especifíca los hosts a los que la cookie deberá ser enviado. Por ejemplo si el atributo Domain es "example.com", el cliente debe incluir la cookie cuando haga peticiones a sitios como example.com, www.example.com y ww.corp.example.com; y de igual manera sólo aceptará esta cookie de estos sitios. Si este atributo no se incluye, entonces el cliente regresa la cookie sólo al servidor de origen.
El atributo Path limita las rutas a la cual la cookie será utilizada. Si este atributo es omitido, la cookie será utilizada sólo para la carpeta que se está visitando.
El atributo Domain especifíca los hosts a los que la cookie deberá ser enviado. Por ejemplo si el atributo Domain es "example.com", el cliente debe incluir la cookie cuando haga peticiones a sitios como example.com, www.example.com y ww.corp.example.com; y de igual manera sólo aceptará esta cookie de estos sitios. Si este atributo no se incluye, entonces el cliente regresa la cookie sólo al servidor de origen.
El atributo Path limita las rutas a la cual la cookie será utilizada. Si este atributo es omitido, la cookie será utilizada sólo para la carpeta que se está visitando.
lang
Con este atributo el servidor puede preguntar por el idioma de preferencia y el cliente enviaría en en la respuesta http el idioma deseado.
Nota: Un servidor puede almacenar múltiples cookies en un cliente, por ejemplo puede utilizar una cookie para cierto idioma y otra para el identificador de sesión
Set-Cookie: SID=31d4d96e407aad42; Path=/
Set-Cookie: lang=en-US; Path=/; Domain=example.com
Cliente -> Servidor
Cookie: SID=31d4d96e407aad42; lang=en-USExpires
Si el servidor quiere especificar una fecha de expiración de la cookie se utiliza este atributo, que es representado por la fecha y hora en la que la cookie expirará. Utilizando este atributo el cliente debe borrar la cookie antes de la fecha establecida. No es necesario que el cliente guarde la cookie, sólo debe almacenarla durante el tiempo de sesión
Set-Cookie: lang=en-US; Expires=Wed, 09 Jun 2021 10:18:14 GMT
Cliente -> Servidor
Cookie: SID=31d4d96e407aad42; lang=en-US
Para indicarle al cliente que la fecha de expiración ya pasó, el servidor debe mandar un encabezado con una fecha pasada; esta cookie será eliminada solo si la ruta y el dominio coinciden con los especificados en la cookie
Set-Cookie: lang=; Expires=Sun, 06 Nov 1994 08:49:37 GMT
Cliente -> Servidor
Cookie: SID=31d4d96e407aad42
Max-Age
Este atributo indica el máximo tiempo de vida que tendrá la cookie, pero a diferencia del atributo Expires, Max-Age se indica con el número de segundos que la cookie tendrá como tiempo de vida.
Si una cookie tiene como atributos Max-Age y Expires, el primero (Max-Age) tiene preferencia; y si ninguno de los dos atributos está presente la cookie será utilizada sólo hasta que la sesión termine.
Si una cookie tiene como atributos Max-Age y Expires, el primero (Max-Age) tiene preferencia; y si ninguno de los dos atributos está presente la cookie será utilizada sólo hasta que la sesión termine.
Atributo Secure
Utilizando este atributo la cookie será limitada a solo usarse mediante canales seguros, esto es, la cookie sólo será incluida en las peticiones http sólo si es un canal seguro.
Aunque se habla se seguridad, esto sólo protege la confidencialidad de la cookie no quiere decir que estará protegida de posibles ataques.
HttpOnly
Con este atributo indica que la cookie solo se utilizará en petciones HTTP, esto es, el cliente ignorará cookies que no provengan de API's que no son HTTP
El orden en que el cliente almacena los distintos campos de cada cookie es de la siguiente manera: name, value, expiry-time, domain, path, creation-time, last-access-time,
persistent-flag, host-only-flag, secure-only-flag, and http-only-
flag.
Cuando el cliente recibe una cookie, actúa de la siguiente manera:
- El cliente ignora cookies que vengan de terceros.
- Se crea una nueva cookie con nombre, su valor, etc
- Si tiene como atributo "Max-Age" se activa la bandera de persistencia y se establece el tiempo de vida; y si no tiene este atributo pero tiene el atributo "Expires" se activa de igual manera la bandera de persistencia y se establece la fecha en la que expirará
- Busca el atributo "Domain"
- Se busca si la cookie está configurada para rechazar dominios públicos como "com", "co.uk", etc
- Busca por el atributo "Path" para establecer la ruta de la cookie
- Si en la lista de atributos se encuentra "Secure" para activar su bandera, de igual manera se busca el atributo "HttpOnly" para activar su bandera.
- Si hay una cookie con el mismo nombre, dominio y ruta se reemplaza la vieja cookie por la nueva.
Limitaciones
Este rfc tiene como limitaciones el número y el tamaño de las cookies, ya que sólo se pueden almacenar:
- 4096 bytes por cookie.
- 50 cookies por dominio.
- 3000 cookies en total.
Para evitar que se alcancen estos límites los servidores utilizan pequeñas cookies, además de que con esto aprovechan el ancho de banda.
Por lo que podemos ver este poco espacio de almacenamiento provoca que muchas veces nuestros navegadores desplieguen mensajes de error relacionados con las cookies y tengamos que borrarlas manualmente.
Me hubiera gustado ver un crítica constructiva integral al final. 9 pts.
ReplyDelete