Referrer-Policy

O cabeçalho HTTP Referrer-Policy controla quanta informação de referência (enviado pelo cabeçalho Referer) deve ser incluída nas requisições.

Tipo de cabeçalho Response header
Forbidden header name não

Sintaxe

O nome original do cabeçalho Referer é um erro ortográfico da palavra "referrer". O cabeçalho Referrer-Policy não compartilha do mesmo erro ortográfico.

Referrer-Policy: no-referrer
Referrer-Policy: no-referrer-when-downgrade
Referrer-Policy: origin
Referrer-Policy: origin-when-cross-origin
Referrer-Policy: same-origin
Referrer-Policy: strict-origin
Referrer-Policy: strict-origin-when-cross-origin
Referrer-Policy: unsafe-url

Diretivas

no-referrer
O cabeçalho Referer será omitido completamente. Nenhuma informação de referência será enviada junto com as requisições.
no-referrer-when-downgrade (padrão)
Este é o comportamento padrão quando nenhuma política é especificada, ou se o valor provido é inválido. A origem, caminho e cadeia de consulta (origin, path, and querystring) da URL são enviadas como referência quando os níveis de protocolo de segurança continuam os mesmos (HTTP→HTTP, HTTPS→HTTPS) ou melhora (HTTP→HTTPS), mas não é enviado para destinos menos seguros (HTTPS→HTTP).
Existe um esforço dos navegadores em mover para um valor padrão mais estrito, chamado de strict-origin-when-cross-origin (veja https://github.com/whatwg/fetch/pull/952), considere usar este valor (ou um mais estrito), se possível, quando trocando a Referrer-Policy.
origin
Somente envia a origem (origin) do documento como referência.
Por exemplo, um documento em https://example.com/page.html irá mandar a referência https://example.com/.
origin-when-cross-origin
Envia a origem, caminho e cadeia de consulta quando performando uma requisição same-origin, mas somente envia a origem do documento em outros casos.
same-origin
A referência será enviada para origens do mesmo site, mas requisições entre origens  não enviarão informação de referência.
strict-origin
Envia somente a origem do documento como referência quando o nível de protocolo de segurança se mantém o mesmo (HTTPS→HTTPS), mas não o envia para um destinatário menos seguro (HTTPS→HTTP).
strict-origin-when-cross-origin
Envia a origem, caminho e cadeia de consulta quando performando uma requisição de mesma origem, somente envia a origem quando o nível do protocolo de segurança se mantém o mesmo durante uma requisição entre origens (HTTPS→HTTPS), e envia nenhum cabeçalho para destinatários menos seguros (HTTPS→HTTP).
unsafe-url
Envia a origem, o caminho e a cadeia de consulta quando performando qualquer requisição, independente da segurança.

Esta política irá vazar informações potencialmente privadas da URL HTTPS do recurso para origens inseguras. Considere o impacto desta configuração com cuidado.

Integração com HTML

Você também pode colocar política de referência dentro do HTML. Por exemplo, você pode colocar uma política de referência para o documento inteiro com um elemento <meta> com um nome de referrer:

<meta name="referrer" content="origin">

Ou colocar ele para requisições individuais com o atributo referrerpolicy nos elementos <a>, <area>, <img>, <iframe>, <script>, or <link>:

<a href="http://example.com" referrerpolicy="origin">

Alternativamente, uma relação de link noreferrer em um elemento a, area, ou link pode ser colocada:

<a href="http://example.com" rel="noreferrer">

Integração com CSS

CSS pode buscar recursos referênciados de suas folhas de estilo. Estes recursos seguem a política de referência também como:

  • Folhas de estilo CSS externas usam a política padrão (no-referrer-when-downgrade), a não ser que seja sobrescrita por um cabeçalho HTTP Referrer-Policy na resposta da folha de estilo CSS.
  • Para elementos <style> ou atributos style, a política de referência do dono do documento é utilizada.

Exemplos

Política Documento Navegar para Referência
no-referrer https://example.com/page qualquer lugar (sem referência)
no-referrer-when-downgrade https://example.com/page https://example.com/otherpage https://example.com/page
https://mozilla.org https://example.com/page
http://example.org (sem referência)
origin https://example.com/page qualquer lugar https://example.com/
origin-when-cross-origin https://example.com/page https://example.com/otherpage https://example.com/page
https://mozilla.org https://example.com/
http://example.com/page https://example.com/
same-origin https://example.com/page https://example.com/otherpage https://example.com/page
https://mozilla.org (sem referência)
strict-origin https://example.com/page https://mozilla.org https://example.com/
http://example.org (sem referência)
http://example.com/page qualquer lugar http://example.com/
strict-origin-when-cross-origin https://example.com/page https://example.com/otherpage https://example.com/page
https://mozilla.org https://example.com/
http://example.org (sem referência)
unsafe-url https://example.com/page?q=123 qualquer lugar https://example.com/page?q=123

Especificando uma política de recuo (fallback)

Se você quer especificar uma política de recuo em qualquer caso que a política desejada não tenha um grande suporte do navegador, use uma lista separada por vírgulas com a política desejada especificada por último:

Referrer-Policy: no-referrer, strict-origin-when-cross-origin

No cenário acima, no-referrer só será usada se strict-origin-when-cross-origin não for suportada pelo navegador.

Especificar múltiplos valores só é suportado no cabeçalho HTTP Referrer-Policy, e não no atributo referrerpolicy.

Especificações

Especificação Status
Referrer Policy Rascunho do editor

Compatibilidade de navegador

BCD tables only load in the browser

  • Da versão 53 em diante, Gecko possui uma preferência disponível em about:config para permitir usuários colocarem a Referrer-Policy padrão — network.http.referer.userControlPolicy.
  • Da versão 59 em diante (veja #587523), isso foi substituído por network.http.referer.defaultPolicy e network.http.referer.defaultPolicy.pbmode.

Valores possíveis são:

  • 0 — no-referrer
  • 1 — same-origin
  • 2 — strict-origin-when-cross-origin
  • 3 — no-referrer-when-downgrade (o padrão)

Veja também