Como se referir (r) er funciona tecnicamente?
-
28-09-2019 - |
Pergunta
Não entendo: como o servidor da web e rastreadores como o Google Analytics são capazes de rastrear referências?
Faz parte do http?
É um comportamento (não) especificado dos navegadores?
Aparentemente, toda vez que você clica em um link em uma página da web, a página da web original é passada ao longo da solicitação.
Qual é o mecanismo exato por trás disso? É especificado por algumas especificações?
Eu li alguns documentos e joguei com meu próprio servidor Tomcat e minha própria conta do Google Analytics, mas não entendo como acontece a "mágica".
Bônus (totalmente relacionada) Pergunta: Se, no meu próprio site (servido pelo Tomcat), coloquei um link para outro site, o outro site veja meu site como o "referenciador" sem que eu faça nada de especial no Tomcat?
Solução
O referente (com erros de ortografia na especificação) é um cabeçalho HTTP. É um cabeçalho padrão que todos os principais clientes HTTP suportam (embora alguns servidores de proxy e firewalls possam ser configurados para retirá -lo ou gerenciá -lo). Quando você clica em um link, seu navegador envia uma solicitação HTTP que contém a página solicitada e a página na qual o link foi encontrado, entre outras coisas.
Como este é um cabeçalho de cliente/solicitação, o servidor é irrelevante e, sim, clicar em um link em uma página hospedada em seu próprio servidor resultaria em que o URL da página seja enviado ao servidor do outro site, embora seu servidor possa não estar necessariamente acessível A partir desse outro site, dependendo da sua configuração de rede.
Outras dicas
Um detalhe a acrescentar ao que já foi dito sobre como os navegadores enviam: o HTTPS altera um pouco o comportamento. Não sei se está em alguma especificação, mas se você pular de HTTPS para HTTP e se você permanecer no mesmo domínio ou ir para diferentes domínios, às vezes o referenciador não é enviado. Não conheço as regras exatas, mas observei isso na natureza. Se houver alguma especificação ou descrição sobre isso, seria ótimo.
EDIT: OK, a RFC diz claramente:
Os clientes não devem incluir um campo de cabeçalho do referente em uma solicitação HTTP (não segura) se a página de referência foi transferida com um protocolo seguro.
Portanto, se você passar da página HTTPS para um link HTTP, o INFO INFORMAÇÃO DE REFERÊNCIO não será enviado.
A partir de: http://en.wikipedia.org/wiki/http_referrer
O campo referenciador é uma parte opcional da solicitação HTTP enviada pelo programa do navegador para o servidor da Web.
Da RFC 2616:
O campo do cabeçalho de solicitação do referente [sic] permite que o cliente especifique, para o benefício do servidor, o endereço (URI) do recurso a partir do qual a solicitação-URI foi obtida (o "referenciador", embora o campo de cabeçalho esteja com ortografia.)
Se você solicitar uma página da Web usando um navegador, seu navegador enviará o cabeçalho do referente HTTP junto com a solicitação.
O seu navegador passa o referenciador com cada solicitação de página.
Parece incomum que o JavaScript também tenha acesso a isso, mas sim.
Sim, o navegador envia a página anterior nos cabeçalhos HTTP. Isso é definido na especificação HTTP/1.1:
http://www.w3.org/protocols/rfc2616/rfc2616-sec14.html#sec14.36
A resposta para sua pergunta é sim, pois o navegador envia o referente.
"O campo referenciador é uma parte opcional da solicitação HTTP enviada pelo programa do navegador para o servidor da Web".
Quando você clica em um link, o navegador adiciona um Referer
Caminhão para o pedido. Isso é parte do http. Você pode ler mais sobre isso aqui.