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, como possibilitar o envio mais rápido, facilitar o compartilhamento entre usuários e experiências off-line mais simples.

Como funcionam as trocas HTTP assinadas? Essa tecnologia permite que um editor assine uma única troca HTTP (ou seja, um par de solicitação/resposta), da maneira que a troca assinada pode ser disponibilizada por 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ífico. Estamos animados com os possíveis usos das SXG, como:

  • Pré-busca que preserva a privacidade:a pré-busca de recursos (por exemplo, por link rel=prefetch) para uma navegação subsequente pode fazer com que ela pareça muito mais rápida, mas também tem desvantagens na privacidade. Por exemplo, a pré-busca de recursos para navegações de origem cruzada vai divulgar para o site de destino que o usuário tem interesse em uma informação, mesmo que, em última análise, não tenha visitado o site. Por outro lado, as SXG permitem a pré-busca de recursos de origem cruzada 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 usuários a outros sites. Especificamente, o Google planeja usar esse recurso nas páginas de resultados da pesquisa 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: conteúdo que se tornou conhecido de repente (por exemplo, vinculado à primeira página do reddit.com) muitas vezes sobrecarrega o site em que o conteúdo é exibido e, se o site for relativamente pequeno, tende a diminuir ou ficar temporariamente indisponível. Essa situação pode ser evitada se o conteúdo for compartilhado usando servidores de cache rápidos e avançados, e as SXG tornam isso possível sem compartilhar suas chaves TLS.

Como testar trocas assinadas

As trocas assinadas estão disponíveis no Chrome 73 e versões posteriores e anteriormente estavam disponíveis como um teste de origem.

Criando suas SXG

Para criar SXGs para sua origem (como editor), você precisa de uma chave de certificado para assinar a assinatura. Além disso, o certificado precisa ter uma extensão"CanSignHttp Exchanges" 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 SXG nesta página.

Depois de receber um certificado para as SXGs, crie suas próprias SXGs usando as ferramentas do gerador de referências publicadas no GitHub.

Também é possível conferir 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. 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

Para criar SXGs para testes, é possível criar um certificado autoassinado e ativar 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 seguinte 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 SXG 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. Assim, o conteúdo assinado expira relativamente rápido.

Enviar feedback

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

Feedback