Most people know little about content negotiation, and the little they think they know is often wrong (see [1-3] for more information about CN). In a nutshell, CN allows you to link to a URI "foo" but, for example, without specifying its format (e.g., "foo.html" vs. "foo.pdf") or language ("foo.html.en" vs. "foo.html.es"). Your browser automatically passes preferences to the server (e.g., "I slightly prefer HTML over PDF, and I greatly prefer English to Spanish") and the server tries to find its best representation of "foo" that matches your preferences. In fact, CN defines 4 dimensions where the browser and server can negotiate the "best" representation: type, language, character set, and encoding (e.g., .gz vs. .zip).
We define a fifth dimension for CN: Datetime. If you configure your browser to prefer to view the web as it existed at a particular time, say January 29, 2008, then you could click on:
and not get the current version, but rather get an older version of the page (in this case, before Johnny Marr had joined the band).
There are two kinds of "tricks" that must be addressed to make this possible:
1. The client can be configured to specify the desired Datetime. Scott Ainsworth is currently developing a Firefox add-on for us and will be releasing "real soon now" (tm). In the mean time, you can play with a browser-based client developed by LANL just to see how it works.
2. The server must know how to "do the right thing" (tm). There are several ways to do this. One, if the server is running a content management system that keeps track of prior versions, then the server can respond with correct older version. For example, we have a plug-in for mediawiki that maps the incoming Datetime requests to the prior versions.
Or the production server can redirect the client to where it knows its pages are. For example, the following demo pages:
"know" about their corresponding transactional archives at http://mementoarchive.lanl.gov/ and http://mementoarchive.cs.odu.edu/, respectively, and will redirect clients to the correct archive.
Third, the server can redirect the client to an aggregator we've developed (see the simple mod_rewrite rules that perform this function). For example, this rule is installed at http://digitalpreservation.gov/; if the server there detects a Memento request, it will redirect the client to the aggregator which will search the Internet Archive, Archive-It, and other public web archives for the best Datetime match.
Finally, if the server is not configured to do any of those things, the Firefox add-on attempts to detect the server's non-compliance and redirect the client to the aggregator (for the same effect as described above).
The above is a short description of how Memento works. More details can be found in our eprint:
Herbert Van de Sompel, Michael L. Nelson, Robert Sanderson, Lyudmila L. Balakireva, Scott Ainsworth, Harihar Shankar, "Memento: Time Travel for the Web", arXiv 0911.1112, November 2009.
Also, we have a number of upcoming presentations where you can catch us explaining Memento in more detail:
- Library of Congress Brown Bag Seminar, November 16 2009.
- OCLC Distinguished Research Seminar, November 19 2009.
- CNI Fall 2009 Project Briefing, December 14-15 2009
1. Transparent Content Negotiation in HTTP, RFC 2295.
2. Content Negotiation, Apache HTTP Server Documentation.
3. ODU CS 595 Week 10 Lecture.