Trocas de HTTP assinadas

Kinuko Yasuda

O Signed HTTP Exchange (ou "SXG") é um subconjunto da tecnologia emergente chamada Pacotes da Web, que permite aos editores tornar o conteúdo portátil com segurança, ou seja, disponível para redistribuição por outras partes, mantendo a integridade e a atribuição do conteúdo. O conteúdo portátil tem muitos benefícios, desde permitir a entrega mais rápida de conteúdo até facilitar o compartilhamento de conteúdo entre usuários e simplificar as experiências off-line.

Então, como funcionam as Signed HTTP Exchanges? Essa tecnologia permite que um editor assine uma única troca HTTP (ou seja, um par de solicitação/resposta) para que a troca assinada possa ser veiculada em qualquer servidor de armazenamento em cache. Quando o navegador carrega essa troca assinada, ele pode mostrar com segurança o URL do editor na barra de endereço, porque a assinatura na troca é prova suficiente de que o conteúdo veio originalmente da origem do editor.

Troca assinada: a essência

Isso separa a origem do conteúdo de quem o distribui. Seu conteúdo pode ser publicado na Web sem depender de um servidor, uma conexão ou um serviço de hospedagem específicos. Estamos animados com os possíveis usos das SXG, como:

  • Pré-busca que preserva a privacidade:embora a pré-busca de recursos (por exemplo, by link rel=prefetch) para uma navegação posterior possa fazer a navegação parecer muito mais rápida, ela também tem desvantagens na privacidade. Por exemplo, a pré-busca de recursos para navegações de origem cruzada vai revelar ao site de destino que o usuário tem interesse em alguma informação, mesmo que ele não tenha acessado o site. Por outro lado, as SXG permitem a pré-busca de recursos entre origens de um cache rápido sem nunca chegar ao site de destino, comunicando o interesse do usuário apenas se e quando a navegação ocorrer. Acreditamos que isso pode ser útil para sites cujo objetivo é direcionar os usuários a outros sites. O Google planeja usar isso especificamente nas páginas de resultados da Pesquisa Google para melhorar os URLs de AMP e acelerar os cliques nos resultados da pesquisa.

  • Benefícios de uma CDN sem ceder o controle da chave privada do certificado: o conteúdo que se tornou conhecido repentinamente (por exemplo, vinculado da primeira página do reddit.com) geralmente sobrecarrega o site em que ele é veiculado e, se o site for relativamente pequeno, ele tende a ficar mais lento ou até mesmo temporariamente indisponível. Essa situação pode ser evitada se o conteúdo for compartilhado usando servidores de cache rápidos e eficientes, e as SXG permitem isso sem compartilhar suas chaves TLS.

Como testar as trocas assinadas

As trocas assinadas estão disponíveis no Chrome 73 e versões mais recentes e já estavam disponíveis como um teste de origem.

Como criar suas SXG

Para criar SXGs para sua origem (como editor), você precisa de uma chave de certificado para assinar a assinatura, e o certificado precisa ter uma extensão"CanSignHttpExchanges" especial para ser processado como uma SXG válida. A partir de novembro de 2018, a DigiCert é a única CA compatível com essa extensão. É possível solicitar o certificado que funciona para SXGs nesta página.

Depois de receber um certificado para SXG, você pode criar suas próprias SXGs usando as ferramentas de geração de referências publicadas no GitHub.

Veja também os arquivos de exemplo de SXG reais no repositório de código do Chrome. Por exemplo, este é o mais simples criado para um arquivo de texto simples. Observe que eles são gerados principalmente para testes locais. Não espere que eles tenham certificados e carimbos de data/hora válidos na assinatura.

Como testar o recurso localmente

Se quiser criar SXGs para fins de teste, crie um certificado autoassinado e ative o chrome://flags/#allow-sxg-certs-without-extension para que o Chrome processe as SXGs criadas com o certificado sem a extensão especial.

Um código como o abaixo vai funcionar se o servidor, o certificado e as SXGs estiverem configurados corretamente:

<!-- prefetch the sample.sxg -->
<link rel="prefetch" href="https://your-site.com/sample.sxg" />

<!-- clicking the link below should make Chrome navigate to the inner
     response of sample.sxg (and the prefetched SXG is used) -->
<a href="https://your-site.com/sample.sxg">Sample</a>

As SXGs só são compatíveis com a tag âncora (<a>) e link rel=prefetch no Chrome 73 e versões mais recentes. Além disso, a validade da assinatura é limitada a sete dias por especificação. Portanto, o conteúdo assinado expira relativamente rápido.

Fornecer feedback

Queremos seu feedback sobre o experimento em webpackage-dev@chromium.org. Você também pode participar da discussão sobre especificações ou informar um bug do Chrome para a equipe. Seu feedback ajudará muito no processo de padronização e também nos ajudará a resolver problemas de implementação.

Feedback