Todo sobre http referer

By Javier Lorente Murillo / a couple of months ago

¿Qué es el referrer?

Cuando estamos en una web y vamos a otra a través de un enlace, la web de destino puede conocer desde qué web vienes gracias al la una variable de las cabeceras que se envían cliente y servidor llamada “referrer“. Es una propiedad de los protocolos http y https de las muchas se envían en las cabeceras de la petición del cliente. Es decir, el referrer lo envía el navegador del cliente, no el servidor.

¿Cómo ver el referrer

  1. La forma más sencilla es crearse un marcador en tu navegador con la sentencia “javascript:alert(document.referrer)”.
  2. Con la variable “$_SERVER[“HTTP_REFERER”]” de PHP.
  3. Con mil y una extensiones para tu navegador, chrome, firefox, etc
referer http

Hay muchas formas de ver el referer

¿Cómo funciona?

Os dejo un vídeo de Miguel Pascual donde explica un poco más los diferentes tipos de cabeceras:

Por lo tanto, nosotros como administradores de la máquina, podríamos cambiar el referrer de nuestros navegadores sin demasiados problemas. En la Wikipedia explican más acerca de esta cabecera, por si queréis profundizar.

Seguimos, según la definición del RFC 2616 del protocolo HTTP 1.1 (un RFC son documentos que estandarizan el funcionamiento de Internet y que desarrolla un organismo internacional llamado IETF) cuando se pasa de una conexión segura (https) a una (http) no se debe pasar referrer. Y hasta hace unos meses nunca se pasaba, fíjaos que hablo en pasado y ahora explico por qué.

La Teoría del HTTP Referrer hasta hace unos meses era:

  • http -> http: se pasa referrer
  • http -> https: se pasa referrer
  • https -> http: no se pasa referrer
  • https -> https: se pasa referrer

Sin embargo, había muchos intereses en que el referrer se mantuviese cuando pasamos desde páginas https hacia http. Sin ir más lejos las grandes redes sociales y buscadores comenzaron hace años a servir sus páginas bajo https:// y son los principales interesados en que los dueños de los sitios web viésemos cuánto tráfico nos genera twitter, facebook, google, bing, yahoo, etc. Todos ellos sirviéndose como hemos dicho bajo https://. ¿Cómo lo lo hacen? De 2 formas:

referrer en https

1º) Usando redirectores intermedios bajo http.
En lugar de enviar directamente al usuario que hace click en un enlace de una página de resultados de google o de facebook  al destino final, lo envían a una URL intermedia bajo http, con lo cual se mantiene el referrer.

En el momento de escribir este artículo tenemos estos redirectores:

  • Google: http://www.google.es/url?
  • Yahoo!: http://r.search.yahoo.com
  • Twitter: href=”http://t.co/_url acortada
  • Facebook: http://l.facebook.com/l.php?u=http://url…

2º) Mediante la meta_referrer.
Mediante esta meta etiqueta que se pone en la cabecera del HTML  podemos forzar a los navegadores compatibles con la meta etiqueta, a pasar el referrer incluso cuando pasamos de conexiones https a http. Para los que quieran profundizar en el funcionamiento de la etiqueta, os recomiendo este artículo de smerety.com. La etiqueta apareció en 2011, ahora solo era cuestión de esperar a que los navegadores fuesen teniendo soporte para la etiqueta para que lo se pudiese hacer el cambio definitivo y total a https:// sin tener que usar redirectores intermedios bajo http.

meta_referrer

25 de Mayo de 2014

Antes de seguir con este artículo sobre el referrer metatag conviene leer primero el que escribí sobre el http referrer convencional. Básicamente y a modo de resumen con el uso de la meta etiqueta podemos forzar al navegador a pasar el referrer incluso en conexiones https > http.

Como muchos sabréis, Google a principios de 2012 comenzó a experimentar con búsquedas bajo https cuando estabas logado en google.com y con algunos navegadores, para terminar meses más tarde forzando la búsqueda segura en todos los ccTLD y prácticamente en el 100% de casos y navegadores. A todos nos suena el famoso not provided mediante el cual Google dejó de pasar las keywords con la que un usuario había llegado a nuestra web si procedía de una búsqueda segura (o sea, siempre)

La idea de Google siempre ha sido y es usar https para todas las conexiones por lo que tenía que ir preparando de alguna forma el terreno para que los sitios web bajo http pudiesen seguir recibiendo el referrer Google. Lo explican muy bien en este post de Marzo de 2012, donde cuentan que a partir de entonces comenzaban a usar una nueva meta denominada “referrer metatag” mediante la cual, forzarían a los navegadores compatibles con la meta etiqueta, a pasar el referrer incluso cuando pasásemos de https a http.

Los navegadores enseguida se adaptaron al uso de la etiqueta meta_referrer, Chrome sin ir más lejos tiene soporte para ella desde la versión 17. A decir verdad, fueron tiempos convulsos para la analítica web puesto que había demasiados factores en la ecuación, google.com, google.ccTLD, logado, no logado, diferentes versiones de chrome o firefox, las cajitas de búsqueda de las toolbars de los navegadores… en fin, un auténtico caos. Google simplemente estaba esperando a que una buena parte de los navegadores tuviesen soporte para meta_referrer para cambiar el redirector intermedio de http a https. Lo que hizo hace unos días (12 de Mayo 2014), solo para las últimas versiones de chrome y sin avisar, por supuesto. Actualizacion: También ha desplegado la actualización para las últimas versiones de firefox.

Ahora podemos decir que prácticamente el 100% de los navegadores soportan la etiqueta meta_referrer, que prácticamente el 100% de las búsquedas desde Google son https, que facebook también pasó a servirse bajo https y que también usa el meta_referrer para forzar que  los sitios sepan que ese tráfico lo genera facebook (son los principales interesados) y también me aventuraría a decir que vamos hacia a una internet donde el 100% de las conexiones serán https.

Profundizando en el uso de la etiqueta meta_referrer vemos que tiene algunas peculiaridades, no solo sirve para forzar (si queremos) al navegador a pasar el referrer, también podemos configurarlo a nuestro antojo con estas 4 opciones:

  • never: Reemplazar siempre el referrer-header-value con una cadena de texto vacía.
  • default: Reemplazar el referrer-header-value con una cadena de texto vacía cuando el componente del referrer-header-value represente un protocolo que use una capa de seguridad y el componente del recurso llamado no lo haga.
  • origin: Reemplazar el referrer-header-value con el origen del documento.
  • always: No reemplazar ni cambiar el referrer-header-value.

Si te has quedado con ganas de frikear, te dejo un bonus sobre otra cabecera llamada “Origin“.

Aprovechando el post he hecho una pequeña investigación sobre buscando ejemplos de usos de la etiqueta (entro con Chrome 37)

Meta de https://www.facebook.com/ 
<meta name=”referrer” content=”default” id=”meta_referrer” />
– Aquí parece que se comporta como si fuese “origin” puesto que en todas las pruebas que he hecho, desde fanpages, perfiles personales, etc únicamente se pasa como referrer https://www.facebook.com/ aunque se pasa por un redirector intermedio bajo http.

Meta https://www.google.es/
<meta content=”origin” id=”mref” name=”referrer”>
Al acceder con todos los navegadores actuales Google nos redirige automáticamente a la conexión segura así que no tiene sentido a analizar el comportamiento de http://www.google.es/

Meta de http://news.google.es/ (no secure)
No lleva meta. Pero da igual, el referrer se pasa al ser un http.

Meta de https://news.google.es/ (secure)
No lleva meta. Supongo que será un despiste o que llegará un momento que integrarán la salida de News dentro del dominio principal tal y como hicieron con images.google.com. Sin embargo, en este caso ¡sí que se pasa referrer! ¿por qué? Por las misma razón que google. es, no se enlaza directamente el destino. De la serp https se enlaza primero una url intermedia de google a modo de redireccionador y bajo http por lo que , incluso sin la meta, se sigue pasando referrer porque realmente al destino llegamos desde un origen http.

Más ejemplos de este tipo:

Yahoo! https: https://es.yahoo.com/
No lleva el meta. Antes de enviarte el destino te pasa por http://r.search.yahoo.com por lo que el sitio de destino seguirá teniendo el referrer al hacer el downgrade de https a http.

Y ahora el caso curioso de Bing, que depende a que versión accedas,  lo pasa o no:

http://www.bing.com (no secure)
No lleva el meta. Envía el tráfico de forma tradicional y el destino verá el referrer.
https://www.bing.com (secure)
Tampoco lleva el meta y en este caso, curiosamente NO se está enviando referrer. Supongo que eso será algo puntual y que corregirán de alguna forma, con la meta o haciendo la redirección intermedia mediante http como hace Yahoo! En este caso Microsoft es el principal interesado en que los analistas vean cuánto tráfico genera su buscador.

4 comments

Leave a comment: