Trocas de HTTP assinadas

Kinuko Yasuda

O Signed HTTP Exchange (ou "SXG") é um subconjunto da tecnologia emergente chamada Web Packages, que permite aos editores tornar o conteúdo portátil com segurança, ou seja, disponível para redistribuição por terceiros, mantendo a integridade e a atribuição dele. O conteúdo portátil tem vários benefícios, como permitir uma entrega mais rápida, facilitar o compartilhamento entre os usuários e simplificar o uso off-line.

Como funcionam as Signed HTTP Exchanges? Essa tecnologia permite que um editor assinale uma única troca HTTP (ou seja, um par de solicitação/resposta) de modo que a troca assinada possa ser oferecida em qualquer servidor de 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é-carregamento que preserva a privacidade:embora o pré-carregamento de recursos (por exemplo, por link rel=prefetch) para uma navegação subsequente possa tornar a navegação muito mais rápida, ele também tem desvantagens de privacidade. Por exemplo, a pré-busca de recursos para navegações entre origens vai revelar ao site de destino que o usuário pode estar interessado em uma informação, mesmo que não tenha visitado o site. Por outro lado, o SXG permite o carregamento antecipado de recursos entre origens de um cache rápido sem acessar o site de destino, comunicando apenas o interesse do usuário se e quando a navegação ocorrer. Acreditamos que isso pode ser útil para sites cuja meta é direcionar os usuários a outros sites. Em particular, o Google planeja usar isso nas páginas de resultados da pesquisa do Google para melhorar URLs de AMP e acelerar os cliques nos resultados da pesquisa.

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

Testar as trocas assinadas

As trocas assinadas estão disponíveis no Chrome 73 e versões mais recentes. Antes, elas eram oferecidas como um teste de origem.

Como criar um 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 especial CanSignHttpExchanges para ser processado como um SXG válido. Desde novembro de 2018, a DigiCert é a única AC compatível com essa extensão. É possível solicitar o certificado que funciona para SXG em esta página.

Depois de receber um certificado para SXG, você pode criar suas próprias SXGs usando as ferramentas de gerador de referência publicadas no GitHub.

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

Como testar o recurso localmente

Para criar SXGs para fins de teste, crie um certificado autoassinado e ative 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 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>

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

Enviar feedback

Queremos saber sua opinião sobre esse experimento em webpackage-dev@chromium.org. Também é possível participar da discussão sobre as especificações ou informar um bug do Chrome à equipe. Seu feedback vai ajudar muito no processo de padronização e também nos ajudará a resolver problemas de implementação.

Feedback