# Projeto Memento

O protocolo Memento permite que os utilizadores vejam um recurso disponível através da Web, tal como era numa determinada data do passado. O utilizador apenas necessita de saber o URL do recurso que pretende encontrar.
Os utilizadores da Web têm dificuldade todos os arquivos Web que existem e em saber qual destes conterá a versão arquivada do recurso que procuram. O protocolo Memento é uma solução que permite que os utilizadores acedam a um recurso da Web tal como era numa determinada data no passado.
O Memento é um projeto financiado pelo Programa Nacional de Infra-estrutura e Preservação de Informação Digital (NDIIPP) dos Estados Unidos, com o objectivo de detectar mais facilmente os conteúdos arquivados na Web.O projeto está a ser liderado pelo Laboratório Nacional de Los Alamos e a Universidade de Old Dominion.

## Descrição técnica

Existem vários arquivos na web, que recolhem versões específicas dos recursos da web. O Memento permite que o utilizador faça a transição entre os arquivos em busca do melhor recurso arquivado correspondente à data desejada.
Memento é definido na RFC 7089 como uma implementação da dimensão temporal da escolha de conteúdo, como definido por Tim Berners Lee em 1996. O protocolo HTTP realiza negociação de conteúdo via cabeçalhos HTTP. O Memento utiliza o cabeçalho HTTP Accept-Datetime para que os clientes possam solicitar um recurso numa determinada data ao servidor. O servidor Web por sua vez responde com a versão arquivada do recurso mais adequada para data solicitada. Este processo é referido como negociação de data e hora (datetime negotiation).
A tabela abaixo mostra os diferentes cabeçalhos disponíveis para HTTP que permitem que clientes e servidores encontrem o conteúdo desejado pelo utilizador.
Dimensões da Negociação de Conteúdo Fornecido pelo HTTP :
| Cabeçalho De Solicitação | Cabeçalho De Resposta | Dimensão | Exemplos | Referência |
| Accept | Content-Type | tipo de conteúdo da representação | text/html text/plain image/png | RFC 7231 RFC 2616 |
| Accept-Language | Content-Language | a linguagem da representação | en en-US cz | RFC 7231 RFC 2616 |
| Accept-Encoding | Content-Encoding | médio, normalmente de compressão, que o conteúdo foi codificado com | compress gzip deflate | RFC 7231 RFC 2616 |
| Accept-Charset | Content-Type | o conjunto de caracteres utilizado pela página web | iso-8859-5 unicode-1-1 | RFC 7231 RFC 2616 |
| Accept-Datetime | Memento-Datetime | o tempo da representação | Fri, 15 Aug 2014 13:43:03 GMT | RFC 7089 |
Para entender o Memento, deve-se perceber que o campo do cabeçalho HTTP, Last-Modified, não reflete necessariamente quando uma versão em particular da página da Web foi criada. Além disso, o cabeçalho Last-Modified pode não existir em alguns casos. Para fornecer mais informações, o campo Memento-Datetime no cabeçalho foi introduzido para indicar quando uma versão específica de uma página da Web foi observada na Web.
O diagrama acima mostra o processo de 3 etapas pelo qual o Memento encontra a melhor página da web arquivada para a data (datetime) fornecida pelo utilizador. O processo funciona da seguinte forma:
* O cliente Memento contata o recurso original para ver se ele retornará informações sobre um TimeGate (URI-G) no cabeçalho.
* O cliente Memento usa o cabeçalho de solicitação Accept-Datetime para enviar a data e hora (datetime) desejada pelo usuário para o URI-G descoberto na etapa anterior. A maioria dos recursos na web ainda não retornam um URI-G, por isso a maioria dos clientes Memento usam uma lista predefinida de TimeGates para realizar esta etapa. O TimeGate, em seguida, retorna um código de status de redirecionamento 302 e um cabeçalho Location para informar ao cliente onde localizar o recurso arquivado (URI-M).
* O cliente Memento solicita o recurso arquivado (URI-M) como qualquer outra página da web. A resposta para o URI-M contém um Memento-Datetime indicando quando foi observado na web.
Desta forma, o Memento utiliza a infra-estrutura existente de HTTP para atingir os objetivos de encontrar a melhor página da Web arquivada com base na data e hora (datetime) e URI desejados pelo utilizador.
O protocolo Memento é suportado principalmente por arquivos da web mas também se adequa a outros tipos de repositórios que preservem o histórico das versões de objectos ao longo do tempo e que os disponibilizam através da Web, tais como plataformas Wiki ou repositórios de código. O protocolo Memento permite a interoperabilidade com outros arquivos da web e serviços externos de agregação de pesquisa (ex. Memento Time Travel portal e oldweb.today). Recomenda-se que os repositórios que disponibilizam recursos versionados através da Web suportem o protocolo Memento para maximizar a visibilidade e utilização dos serviços disponibilizados.