Como posso passar o cabeçalho do referenciador do meu domínio https para domínios http?

12

Meu site é 100% https. Eu tenho links para outros domínios http. O cabeçalho do referenciador não está definido ao vincular de uma página https a uma página http. De http://en.wikipedia.org/wiki/HTTP_referrer

Se um site for acessado a partir de uma conexão HTTP segura (HTTPS) e um link apontar para qualquer lugar, exceto outro local seguro, o campo de referência não será enviado.

Prefiro que outros domínios possam ver o referenciador, para que saibam que o tráfego vem do meu domínio. Existe uma maneira de forçar esse cabeçalho ou existe outra solução?

Atualizar

Fiz alguns testes básicos usando um redirecionamento:

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

O referenciador é perdido ao vincular de uma página https a uma página de redirecionamento http no meu próprio domínio. Portanto, não há referenciador no redirecionamento.

quebra-nozes
fonte
Ele Origindeve estar intacto, mas pode não se encaixar no seu caso de uso.
Pacerier

Respostas:

8

Eu também tive esse mesmo problema. Eu resolvo adicionando uma meta tag como abaixo e funcionará apenas no Chrome e Safari.

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

Infelizmente você não pode se referir em HTTPS a sites usando HTTP. No entanto, você pode fazer HTTPS para HTTPS ou HTTP para HTTPS.

FONTE

Os clientes não devem incluir um campo de cabeçalho de referência em uma solicitação HTTP (não segura) se a página de referência foi transferida com um protocolo seguro.

Uma solução alternativa seria usar um script de redirecionamento interno que, em vez de direcionar o link para o visitante no HTTPS, você redireciona para HTTP e, em seguida, ele redireciona para fora.

Por exemplo:

<a href="http://www.yours.com/out.php?www.other.com">www.outboundsite.com</a> mas isso não usaria o referenciador original.

Outra possibilidade é usar trackbacks em vez de referenciadores e, tanto quanto sei, isso funciona em HTTPS.

Simon Hayter
fonte
Meu teste indicou que o uso de um redirecionamento não funciona (consulte a atualização).
quebra-nozes
Use trackbacks ou perca o HTTPS;)
Simon Hayter
1
@bybe, esta resposta precisa de uma edição. Consulte serverfault.com/a/520603/87017 e webmasters.stackexchange.com/a/71331/7654
Pacerier
4

Consegui configurar um link de uma página HTTPS para uma página HTTP em outro domínio e ainda transmitir o URL da primeira página como um referenciador usando a seguinte técnica.

Definições

Página de origem : página HTTPS na qual o link para a página de destino hospedado HTTP. Neste exemplo:https://example1.com/origin.html

Página de destino : página HTTP que tem acesso ao referenciador da página de origem. Neste exemplo:http://example2.com/destination.html

Plano básico

Isso tem o efeito de fazer o redirecionamento vir da versão HTTP da página de origem:

  1. O link na página de origem HTTPS vincula à página atual, mas adiciona um parâmetro de consulta para a página de destino [1]. por exemplo:https://example1.com/origin.html?goto=http://example2.com/destination.html

  2. Quando o link é clicado, o servidor em example1.com interrompe a solicitação padrão quando o parâmetro de consulta 'goto' está presente. Isso então:

    • Armazena o parâmetro 'goto' em um cookie 'goto'.
    • Remove o parâmetro 'goto' e o valor do URL da solicitação atual
    • 302 redireciona para esse novo URL limpo na versão HTTP do domínio de origem, ou seja. http://example1.com/origin.html
  3. O servidor verifica todas as solicitações de um cookie 'goto' e, se houver, limpa o cookie e, em seguida, renderiza uma página de redirecionamento muito simples. Esta página contém [2]:

    • Um script Javascript window.location.replace () que redireciona para o URL do cookie Goto.
    • Uma tag Meta Refresh com o valor da URL do cookie Goto e um atraso de alguns segundos.
    • Um link para o URL do cookie Goto.

Notas

[1] Esta solução básica é um redirecionador aberto e deve-se considerar a proteção contra bandidos usando o parâmetro goto query para redirecionar UAs em ataques de phishing.

[2] Nem todos os navegadores enviarão o referenciador ao redirecionar por meio de uma tag de redirecionamento JS ou meta refresh. No meu teste IE8 e inferior não passa o referenciador.

Não tenho certeza se essa técnica permitirá que os rastreadores de mecanismos de pesquisa sigam os links. Isso não é importante para meus requisitos.

Se o UA tiver cookies desativados, isso será redirecionado para a página de origem novamente.

Permitindo conexões HTTP apenas para redirecionamentos

No meu servidor, tenho uma regra do Apache para aplicar HTTPS, independentemente da solicitação:

<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 a técnica de redirecionamento acima funcione, preciso de uma maneira de permitir condicionalmente conexões HTTP. Existem diversas formas de fazer isto. Eu decidi que um cookie funcionaria.

<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]

O cookie disable_ssl seria definido na etapa 2 e excluído na etapa 3.

quebra-nozes
fonte
Ok .... mas isso não passa exatamente o " cabeçalho do referenciador ".
Pacerier
0

Parece que o que você deseja não é possível, portanto, uma possível solução alternativa; se o site de destino estiver usando o Google Analytics (ou um programa compatível, acredito que o Piwik use sintaxe semelhante, e outros pacotes de estatísticas seriam tolos em ignorar isso), você poderá enviar os parâmetros de rastreamento, por exemplo, no seu link para example.com

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

isso será exibido no GA com os detalhes, certifique-se de escolher valores que é improvável que mais alguém use, para não forçá-los a entrar em conflito / ou ocultar seu tráfego atrás de outras pessoas

O Google cria um útil criador de URL aqui http://support.google.com/analytics/answer/1033867?hl=en

Atualização - re: etiqueta

Sem saber mais sobre a natureza do tráfego, só posso falar em geral / pessoalmente ...

etiqueta sempre estará nos olhos de quem vê. Sem isso, acho que no GA, pelo menos, provavelmente apareceria como direto, ou talvez (nenhum conjunto), o que distorceria seus números para fazer parecer que sua marca era maior do que é. Pessoalmente, prefiro uma campanha cuidadosamente escolhida para saber de onde vem o tráfego.

Você também pode ver como, se você dificilmente enviar tráfego a eles, eles provavelmente não perceberão, se você enviar muito, provavelmente não reclamará! Se o fizerem, normalmente você poderá encontrar outra pessoa para dar tráfego grátis!

e se você for muito específico, não deverá causar problemas; campanha como o nome do seu site e origem como a seção do seu site, talvez?

http://www.example.com/?utm_campaign=mygreatsite.com&utm_medium=referral&utm_source=specialoffers
CodeMonkey
fonte
Boa ideia! Eu tinha pensado sobre essa solução alternativa, mas me perguntei se havia algumas "regras" para implementar isso do meu lado. Normalmente, esses parâmetros de consulta são adicionados pelo site de terceiros para que eles possam rastrear suas campanhas etc. Essa abordagem seria considerada uma má prática de alguma forma?
quebra-nozes