様々なレイヤーのArchived website の統合インターフェイスを志向するMementoプロトコル

 過去のエントリでMementoの以下のようなウェブアーカイブに係る取り組みについて紹介しました。

 上だけでも結構すごいと思うのですが、いよいよ本丸ということで、Mementoが公開しているMementoプロトコルのドラフトを読んでみました。

 

 がっ!
 ようわからん・・・( ̄Д ̄;;

 
 頑張ってみましたが、私の知識ではちょっと理解するに及びませんでした。そこでMementoの以下のMementoプロトコルの紹介と

 MementoのHerbert Van de Sompel氏の一年前のスライド(以下)を手がかりに軽く紹介したいと思います。

 
 完全に理解しているわけでもないの紹介するのは少々躊躇われますが、Mementoプロジェクトが志向していることがよくわかるプロトコルです。紹介せずにいられない。

Mementoプロトコルを一言でいえば

 様々なレベル、手法でアーカイブされている過去のウェブ情報に一元的にアクセスさせるためのHTTPを拡張したフレームワーク
です。
標題にある通り、アーカイブされたウェブサイトの一元的なインターフェイスを提供を試みるHTTPプロトコル拡張というべきかもしれません。
 様々なレベル、手法といってもいろいろとありますが、Herbert Van de Sompel氏が上のスライドで挙げた例を参照すると以下のようなものでしょうか。現時点では、もちろん全てがMementoに対応しているわけではありません。

  • Internet Archiveなどのウェブアーカイブプロジェクトが保存した過去のウェブサイト
  • WikiやWordpressなど、バージョン管理システムを搭載しているCMSの差分情報
  • Googleなどが持っているキャッシュ

 つまり、Mementoは、Internet Archiveや世界の国立図書館のウェブアーカイビングプロジェクトだけを対象としているのではなく、検索エンジンのキャッシュやCMSの差分情報など普段、ウェブアーカイビングの文脈では語られにくいコンテンツもラップして統合的なアクセスを試みようとしていることになります。先日紹介したMementoの“SiteStory Web Archive”もそういった様々なウェブアーカイブの1つにサーバーサイド分散型セルフウェブアーカイブ というレイヤーを1つ追加しようという試みなのでしょう。

Mementoプロトコルしくみ

  
 簡単に説明するとHTTPのリクエストに以下のようなAccept-Datetimeヘッダを含めて、あるURLの特定の時点のページをサーバー側に要求を投げ、サーバー側とコンテンツのネゴシエートをする仕組みです。Mementoはこのネゴシエートする対象を様々なレイヤーにひろげようと考えているようなのです。

GET /memento/timegate/http://www.yahoo.co.jp/ HTTP/1.1
Host: purl.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
(省略)
Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GMT
Connection: keep-alive

 
 リクエストを投げた後のフローですが、一番シンプルなケースの場合、オリジナルのURL(URL-R)とアーカイブされたそれぞれの時点のウェブサイト(URL-M)の間にTimeGate(URL-T)というリソースをおいて、このTimeGateでコンテンツをネゴシエートして、求める時点のウェブサイト(URL-M)に誘導します。
オリジナルのURL(URL-R)とアーカイブされたそれぞれの時点のウェブサイト(URL-M)の間にTimeGate(URL-T)というリソースをおいて、このTimeGateでコンテンツをネゴシエート
from Memento Guide: Introduction
  もう少し複雑な例として、TimeBundleとTimeMapを含めたフローもあります。Mementoプロトコルを読んでいて躓いたのは、実はこのTimeBundleとTimeMapでして、あまり詳しい説明ができません。こういうのがあるんだという紹介だけですまさせていただきます。

from Memento Guide: Introduction
 

まとめ?

 以前、「Web情報を保存するとは何かの続きの続き」というエントリを書いた事がありますが、あのエントリで書いたある程度の解はMementoプロトコルかもしれません。どこまで普及するかわからないプロトコルですが、非常に興味深い試みだと思います。IETFのインターネットドラフトとして公開されているのも興味深いですね。RFC化を目指しているのでしょうか。どうせなら、今、ちょうど議論されているHTTP2.0に組み込むよう働きかけたらどうだろうかと勝手ながら思ったりします。 
 

【参考】サーバー・クライアント間のリクエストとレスポンスの大まかなフロー

  
 Memento拡張のヘッダを入れ込んだHTTPでのリクエストとレスポンスのフローを1つ見てみたいと思います。
 ちなみにMementoプロトコルは以下のFirefoxのアドオンをインストールすることで使用することができます。

 今回はMementoでYahoo!Japan(http://www.yahoo.co.jp/)の2007年9月18日時点のウェブサイトにアクセスするとします。この場合、最終的にはInternet Archiveが保存した以下の2007年8月23日時点のウェブサイトが表示されるわけですが、そこまでの大まかなクライアント側とサーバー側のリクエストとレスポンスのフローを紹介します。

(1)リクエスト(クライアント側)

 クライアント側からTimeGateのあるhttp://purl.org/に対して以下のようなリクエストを投げています。2007年9月18日時点のYahoo!Japanのトップページほしいと言っているわけですね。

GET /memento/timegate/http://www.yahoo.co.jp/ HTTP/1.1
Host: purl.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
(省略)
Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GMT
Connection: keep-alive

 「Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GM」が肝です。

(2)レスポンス(purl.orgサーバー側)

  purl.orgサーバーは02(Moved Temporarily)を返しつつ、http://mementoproxy.lanl.gov配下のTimeGateへ誘導します。

HTTP/1.1 302 Moved Temporarily
Date: Thu, 28 Mar 2013 15:21:19 GMT
Server: 1060 NetKernel v3.3 – Powered by Jetty
Location: http://mementoproxy.lanl.gov/aggr/timegate/http://www.yahoo.co.jp/
Content-Type: text/html; charset=iso-8859-1
X-Purl: 2.0; http://localhost:8080
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Length: 299

 

(3)再度のリクエスト(クライアント側)

 クライアント側から(2)で誘導されたTimeGateのあるhttp://mementoproxy.lanl.gov/へ改めてリクエストを出します。(1)と同じようなリクエストですね。

GET /aggr/timegate/http://www.yahoo.co.jp/ HTTP/1.1
Host: mementoproxy.lanl.gov
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
(省略)
Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GMT
Connection: keep-alive

 

(4)レスポンス(mementoproxy.lanl.govサーバー側)

  mementoproxy.lanl.govサーバーは以下のようなレスポンスを返します。

HTTP/1.1 302 Found
Date: Thu, 28 Mar 2013 15:21:20 GMT
Server: Apache
Vary: negotiate,accept-datetime
Link: ;rel=”original”,;rel=”timemap”;type=”application/link-format”,;datetime=”Wed, 20 Nov 1996 06:53:42 GMT”;rel=”first memento”,;datetime=”Sun, 05 Aug 2012 00:00:00 GMT”;rel=”last memento”,;datetime=”Sun, 12 Aug 2007 04:46:13 GMT”;rel=”prev memento”,;datetime=”Mon, 27 Aug 2007 07:53:33 GMT”;rel=”next memento”,;datetime=”Thu, 23 Aug 2007 00:35:41 GMT”;rel=”memento”
Location: http://api.wayback.archive.org/memento/20070823003541/http://www.yahoo.co.jp/#

Content-Length: 0
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/plain; charset=UTF-8

 2007年9月18日時点のYahoo!Japanのトップページがないので、保存されているページのうちで近い日付のものをネゴシエートしています。そして、最終的に、以下のURL、つまり、2007年8月23日にInteret Archiveが保存したのものが一番望む日付に近いよとクライアント側に返します。
http://api.wayback.archive.org/memento/20070823003541/http://www.yahoo.co.jp/
 

(5)Internet Archiveへのリクエスト(クライアント側)

(4)を受けてクライアントはInternet Archiveに2007年8月23日時点のYahoo!Japanのトップページをリクエストします。

GET /memento/20070823003541/http://www.yahoo.co.jp/ HTTP/1.1
Host: api.wayback.archive.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: wayback_server=37
Accept-Datetime: Sat, 18 Aug 2007 12:00:00 GMT
Connection: keep-alive

 

(6)Internet Archiveのレスポンス(api.wayback.archive.orgサーバー側)

  Internet Archiveのapi.wayback.archive.orgサーバーは以下のようなヘッダーを返します。

HTTP/1.1 200 OK
Server: Tengine/1.4.3
Date: Thu, 28 Mar 2013 15:21:21 GMT
Content-Type: text/html;charset=euc-jp
Transfer-Encoding: chunked
Connection: keep-alive
Memento-Datetime: Thu, 23 Aug 2007 00:35:41 GMT
Link: ;rel=”timebundle”, ;rel=”original”,;rel=”memento”; datetime=”Thu, 23 Aug 2007 00:35:41 GMT”, ;rel=”last memento”; datetime=”Mon, 18 Mar 2013 14:17:56 GMT”, ;rel=”first memento”; datetime=”Wed, 20 Nov 1996 06:53:42 GMT”, ;rel=”prev memento”; datetime=”Sun, 12 Aug 2007 04:46:13 GMT”, ;rel=”next memento”; datetime=”Mon, 27 Aug 2007 07:53:33 GMT” , ;rel=”timemap”; type=”application/link-format”,;rel=”timegate”
(省略)

 「Memento-Datetime: Thu, 23 Aug 2007 00:35:41 GMT」を返しています。 Memento-Datetimeはその時点のウェブサイトを持っていることを意味しています。あとは、2007年8月23日時点のYahoo!Japanのトップページを受け取るためにクライアント側とサーバー側でやり取りを繰り返します。

関連エントリ