¿Cómo puedo pasar el encabezado de referencia de mi dominio https a dominios http?

12

Mi sitio web es 100% https. Tengo enlaces a otros dominios http. El encabezado de referencia no se establece cuando se vincula desde una página https a una página http. De http://en.wikipedia.org/wiki/HTTP_referrer

Si se accede a un sitio web desde una conexión HTTP Secure (HTTPS) y un enlace apunta a cualquier lugar excepto a otra ubicación segura, no se envía el campo de referencia.

Preferiría que otros dominios puedan ver el referente para que sepan que el tráfico proviene de mi dominio. ¿Hay alguna manera de forzar este encabezado o hay otra solución?

Actualizar

He realizado algunas pruebas básicas utilizando una redirección:

http page  -- link to http  --> 301 redirect --> http page = referrer intact
https page -- link to https --> 301 redirect --> http page = referrer blank
https page -- link to http  --> 301 redirect --> http page = referrer blank
https page -- link to http  --> 302 redirect --> http page = referrer blank

El referente se pierde cuando se vincula desde una página https a una página de redireccionamiento http en mi propio dominio. Por lo tanto, no hay referencia en la redirección.

cascanueces
fuente
El Origindebe estar intacto, aunque puede no ajustarse a su caso de uso.
Pacerier

Respuestas:

8

También tuve este mismo problema. Resuelvo agregando metaetiquetas como a continuación y funcionará solo en Chrome y Safari.

<meta name="Referrer" content="origin">
Mahendran Sakkarai
fuente
6

Lamentablemente, no puede hacer referencia en HTTPS a sitios que utilizan HTTP. Sin embargo, puede hacer HTTPS a HTTPS o HTTP a HTTPS.

FUENTE

Los clientes NO DEBEN incluir un campo de encabezado Referer en una solicitud HTTP (no segura) si la página de referencia se transfirió con un protocolo seguro.

Una solución sería utilizar un script de redireccionamiento interno que, en lugar de dirigir la vinculación al visitante en el HTTPS, redirija a HTTP y luego redirija.

Por ejemplo:

<a href="http://www.yours.com/out.php?www.other.com">www.outboundsite.com</a> pero esto no usaría el referente original.

Otra posibilidad es usar trackbacks en lugar de referencias y, hasta donde yo sé, esto funciona en HTTPS.

Simon Hayter
fuente
Mi prueba ha indicado que el uso de una redirección no funciona (ver actualización).
cascanueces
Use trackbacks o pierda el HTTPS;)
Simon Hayter
1
@bybe, esta respuesta necesita una edición. Consulte serverfault.com/a/520603/87017 y webmasters.stackexchange.com/a/71331/7654
Pacerier el
4

Pude configurar un enlace desde una página HTTPS a una página HTTP en otro dominio y aún pasar la URL de la primera página como referencia usando la siguiente técnica.

Definiciones

Página de origen : página HTTPS donde se encuentra el enlace a la página de destino alojada HTTP. En este ejemplo:https://example1.com/origin.html

Página de destino : página HTTP que tiene acceso al referente de la página de origen. En este ejemplo:http://example2.com/destination.html

Plan basico

Esto tiene el efecto de hacer que la redirección provenga de la versión HTTP de la página de origen:

  1. El enlace en la página de origen HTTPS enlaza con la página actual pero agrega un parámetro de consulta para la página de destino [1]. p.ej:https://example1.com/origin.html?goto=http://example2.com/destination.html

  2. Cuando se hace clic en el enlace, el servidor de example1.com interrumpe la solicitud estándar cuando el parámetro de consulta 'goto' está presente. Entonces:

    • Almacena el parámetro 'goto' en una cookie 'goto'.
    • Elimina el parámetro y el valor 'goto' de la url de la solicitud actual
    • 302 redirige a esta nueva url limpia en la versión HTTP del dominio de origen, es decir. http://example1.com/origin.html
  3. El servidor verifica cada solicitud de una cookie 'goto' y, si está presente, borrará la cookie y luego mostrará una página de redireccionamiento muy simple. Esta página contiene [2]:

    • Una secuencia de comandos Javascript window.location.replace () que redirige a la URL de la cookie goto.
    • Una etiqueta Meta Refresh con el valor de la URL de la cookie goto y un retraso de unos segundos.
    • Un enlace a la URL de la cookie goto.

Notas

[1] Esta solución básica es un redireccionador abierto y se debe considerar la posibilidad de protegerse contra los malos usando el parámetro goto query para redirigir los UA en ataques de phishing.

[2] No todos los navegadores enviarán el referente al redirigir mediante una etiqueta de redireccionamiento JS o meta refresco. En mis pruebas, IE8 y versiones inferiores no pasan el referente.

No estoy seguro de si esta técnica permitirá a los rastreadores de motores de búsqueda seguir los enlaces. Esto no es importante para mis requisitos.

Si el UA tiene las cookies deshabilitadas, esto solo redirigirá a la página de origen nuevamente.

Permitir conexiones HTTP solo para redireccionamientos

En mi servidor tengo una regla de Apache para aplicar HTTPS independientemente de la solicitud:

<VirtualHost *:80>
    ServerName example1.com

    # if not on port 443 then 301 redirect to https while keeping any query string
    RewriteEngine              On
    RewriteCond %{HTTP_HOST}  ^example1\.com$ [NC]
    RewriteCond     %{SERVER_PORT} !443
    RewriteRule     ^(.*)$     https://%{HTTP_HOST}$1 [L,QSA,R=301]

Para que la técnica de redireccionamiento anterior funcione, necesito alguna forma de permitir condicionalmente las conexiones HTTP. Hay muchas maneras de hacer esto. Decidí que una cookie funcionará.

<VirtualHost *:80>
    ServerName example1.com

    # if not on port 443 then 301 redirect to https while keeping any query string
    RewriteEngine              On
    RewriteCond %{HTTP_HOST}  ^example1\.com$ [NC]
    RewriteCond     %{SERVER_PORT} !443
    RewriteCond %{HTTP_COOKIE}  !disable_ssl [NC]
    RewriteRule     ^(.*)$     https://%{HTTP_HOST}$1 [L,QSA,R=301]

La cookie disable_ssl se establecería en el paso 2 y luego se eliminaría en el paso 3.

cascanueces
fuente
Ok .... pero esto no pasa exactamente el " encabezado de referencia ".
Pacerier
0

Parece que lo que quieres no es posible, por lo que es posible una solución alternativa; si el sitio objetivo está utilizando Google Analytics (o un programa compatible, creo que Piwik usa una sintaxis similar, y otros paquetes de estadísticas serían tontos si ignora esto) puede enviar los parámetros de seguimiento, por ejemplo, en su enlace a example.com

http://www.example.com/?utm_campaign=spring&utm_medium=referral&utm_source=exampleblog

esto aparecerá en su GA con los detalles, asegúrese de elegir valores que es poco probable que alguien más use para que no los fuerce a conflictos / u oculte su tráfico detrás de otra persona

Google haga un útil creador de URL aquí http://support.google.com/analytics/answer/1033867?hl=en

Actualización - re: etiqueta

Sin saber más sobre la naturaleza del tráfico, solo puedo hablar en general / personalmente ...

la etiqueta siempre estará en el ojo del espectador. Sin esto, creo que en GA al menos probablemente se vería como directo, o tal vez (ninguno configurado) lo que sesgaría sus cifras para hacer que parezca que su marca era más grande de lo que es. Personalmente, preferiría una campaña cuidadosamente elegida para saber de dónde proviene el tráfico.

También podría verlo como, si apenas les envía tráfico, probablemente no lo noten, si los envía mucho, ¡probablemente no se quejen! Si lo hacen, entonces generalmente puedes encontrar a alguien más para darle tráfico gratis.

y si eres muy específico, no debería causar problemas; campaña como nombre de su sitio y fuente como la sección de su sitio, tal vez?

http://www.example.com/?utm_campaign=mygreatsite.com&utm_medium=referral&utm_source=specialoffers
CodeMonkey
fuente
¡Buena idea! Había pensado en esta solución, pero me preguntaba si había algunas "reglas" para implementar esto desde mi punto de vista. Normalmente, el sitio web de terceros agrega estos parámetros de consulta para que puedan realizar un seguimiento de sus campañas, etc. ¿Se consideraría este enfoque una mala práctica de alguna manera?
cascanueces